Непубличные функции должны быть протестированной единицей и как?

Для входного аргумента, тип которого является типом input, graphql-java преобразует его в Map.

В вашем случае запросом является getByInput (example: {name: "aa"} ), аргументом example которого является тип input. Итак,

dataFetchingEnvironment.get("example");

вернет карту со структурой (key = "name", value = "aa"). При попытке привести карту к Character, что определенно дает ошибку, поскольку они совершенно разных типов.

Чтобы преобразовать карту в Character, graphql-java не поможет вам в таком преобразовании. Вы должны реализовать коды преобразования самостоятельно или использовать другие библиотеки, такие как Jackson, Gson, Dozer или любые другие библиотеки, которые вам нравятся , для преобразования карты в объект вашего домена (т.е. символ).

8
задан alain.janinm 29 April 2012 в 16:18
поделиться

11 ответов

Короткий ответ: да.

Относительно того, как, я поймал передачу ссылки ТАК несколько дней назад:

#define private public

в коде поблочного тестирования, оцененном, прежде чем прочитаны соответствующие заголовки...
Аналогично для защищенного.

Очень классная идея.


Немного более длинный ответ: Тест, если код не является, очевидно, правильным. Что означает по существу любой код, который делает что-то нетривиальное.


На соображении я задаюсь вопросом об этом. Вы не сможете связаться против того же объектного файла, который Вы используете в производственной сборке. Теперь, поблочное тестирование является чем-то вроде искусственной среды, поэтому возможно, это не недопустимое. Кто-либо может пролить некоторый свет на за и против этого приема?

11
ответ дан 5 December 2019 в 04:38
поделиться

Если Ваш объект выполняет очень сложные операции, которые чрезвычайно трудно протестировать через ограниченный открытый интерфейс, опция состоит в том, чтобы факторизовать часть той сложной логики в служебные классы, которые инкапсулируют определенные задачи. Вы можете затем тест единицы те классы индивидуально. Это всегда - хорошая идея организовать Ваш код в легко удобоваримые блоки.

16
ответ дан 5 December 2019 в 04:38
поделиться

Мое чувство лично состоит в том, что при тестировании открытого интерфейса не достаточно для соответствующего тестирования закрытых методов, вероятно, необходимо анализировать класс далее. Мое обоснование: закрытые методы должны делать только достаточно для поддержки всех примеров использования открытого интерфейса.

Но мой опыт с поблочным тестированием является (к сожалению), тонким; если кто-то может обеспечить востребованный пример, где большой блок частного кода не может быть выделен, я, конечно, готов пересмотреть!

5
ответ дан 5 December 2019 в 04:38
поделиться

Существует несколько возможных подходов. предположение Вашего класса X:

  1. Только используйте открытый интерфейс X. Вы будете иметь обширные проблемы установки и, возможно, нуждаетесь в инструменте покрытия, чтобы удостовериться, что Ваш код покрыт, но нет никаких специальных включенных приемов.
  2. Используйте "#define частный общедоступный" или подобный прием для соединения против версии X.o, который выставляется всем.
  3. Добавьте общедоступные "помехи X:: unitTest ()" метод. Это означает, что Ваш код будет поставляться связанный с Вашей средой тестирования. (Однако одна компания я работал с используемым это для удаленной диагностики программного обеспечения.)
  4. Добавьте "класс TestX" как друг X. TestX не поставляется в Вас производство dll/exe. Это только определяется в Вашей тестовой программе, но это имеет доступ к внутренностям X.
  5. Другие...
5
ответ дан 5 December 2019 в 04:38
поделиться

Мое мнение не, обычно они не должны быть протестированы непосредственно.

Модульные тесты являются белым полем с более высокой точки зрения системы, но они должны быть черным квадратом с точки зрения протестированного интерфейса класса (его открытые методы и их ожидаемое поведение).

Так, например, строковый класс (которому не был бы нужен символ прежней версии* поддержка):

  • необходимо проверить, что его длина () метод работает correcly.
  • Вам не придется проверить, что это помещает '\0' символов в конце своего внутреннего буфера. Это - деталь реализации.

Это позволяет Вам осуществлять рефакторинг реализацию почти, не касаясь тестов позже
Это помогает Вам уменьшить связь путем осуществления обязанностей по классу
Это делает Ваши тесты легче поддержать

Исключение для довольно сложных вспомогательных методов, которые требуется проверить более тщательно.
Но затем, это может быть подсказкой, что эта часть кода должна быть "официальной", обнародовав его статичный или извлеченный в ее собственном классе с ее открытыми методами.

3
ответ дан 5 December 2019 в 04:38
поделиться

Если Вы не делаете библиотеку общего назначения, необходимо попытаться ограничить то, что Вы создали, для какого Вы будете использовать. Расширитесь, поскольку Вам нужен он. По сути, у Вас должно быть полное покрытие кода, и необходимо протестировать все это.

Возможно, Ваш код является немного вонючим? Время это для рефакторинга? Если у Вас есть большой класс, делающий много вещей внутренне, возможно, он должен быть поврежден в несколько меньших классов с интерфейсами, которые Вы могли протестировать отдельно.

2
ответ дан 5 December 2019 в 04:38
поделиться

Я сказал бы для использования инструмента покрытия кода, чтобы проверить, функционируют ли они, уже тестируются так или иначе.

Теоретически, если Ваш общедоступный API проходит все тесты затем, закрытые функции хорошо работают, пока каждый возможный сценарий покрыт. Это - основная проблема, я думаю.

Я знаю, что существуют инструменты для той работы с C/C++. CoverageMeter является одним из них.

2
ответ дан 5 December 2019 в 04:38
поделиться

Я всегда думал, что это имело бы тенденцию вставать на свое место при использовании разработки через тестирование. Существует два способа приблизиться к разработке, или Вы запускаете со своего открытого интерфейса и пишете новый тест перед каждым дополнением к сложным закрытым методам, или Вы начинаетесь, работая над сложным материалом как общественность и затем осуществляете рефакторинг код для создания методов частными и тесты, которые Вы уже записали для использования нового открытого интерфейса. Так или иначе необходимо получить полный охват.

Конечно, мне никогда не удавалось записать целое приложение (или даже класс) строгим tdd способом, и рефакторинг сложного материала в служебные классы является способом пойти, если это возможно.

2
ответ дан 5 December 2019 в 04:38
поделиться

Вы могли всегда использовать компиляцию, передвигают частное: как

#if определил (UNIT_TEST)

Или с инструментами покрытия кода проверяют, что Ваше поблочное тестирование Ваших государственных функций полностью осуществляет частные.

0
ответ дан 5 December 2019 в 04:38
поделиться

Да Вы должны. Его названное тестирование методом "белого ящика", это означает, что необходимо знать, что много о внутренностях программы тестирует его правильно.

Я создал бы общедоступные 'тупики', которые вызывают закрытые функции для тестирования. #ifdef тупики так, чтобы можно было скомпилировать их, когда тестирование завершено.

0
ответ дан 5 December 2019 в 04:38
поделиться

Вы могли бы найти это продуктивным, для записи тестовой программы. В тестовой программе создайте класс, который использует класс, который будет протестирован как основа.

Добавьте методы к своему новому классу, для тестирования функций, которые не видимы в открытом интерфейсе. Имейте свою просто тестовую программу, назовите эти методы для проверки функций, которыми Вы обеспокоены.

0
ответ дан 5 December 2019 в 04:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: