Для входного аргумента, тип которого является типом input
, graphql-java
преобразует его в Map
.
В вашем случае запросом является getByInput (example: {name: "aa"} )
, аргументом example
которого является тип input
. Итак,
dataFetchingEnvironment.get("example");
вернет карту со структурой (key = "name", value = "aa"). При попытке привести карту к Character
, что определенно дает ошибку, поскольку они совершенно разных типов.
Чтобы преобразовать карту в Character
, graphql-java
не поможет вам в таком преобразовании. Вы должны реализовать коды преобразования самостоятельно или использовать другие библиотеки, такие как Jackson, Gson, Dozer или любые другие библиотеки, которые вам нравятся , для преобразования карты в объект вашего домена (т.е. символ).
Короткий ответ: да.
Относительно того, как, я поймал передачу ссылки ТАК несколько дней назад:
#define private public
в коде поблочного тестирования, оцененном, прежде чем прочитаны соответствующие заголовки...
Аналогично для защищенного.
Очень классная идея.
Немного более длинный ответ: Тест, если код не является, очевидно, правильным. Что означает по существу любой код, который делает что-то нетривиальное.
На соображении я задаюсь вопросом об этом. Вы не сможете связаться против того же объектного файла, который Вы используете в производственной сборке. Теперь, поблочное тестирование является чем-то вроде искусственной среды, поэтому возможно, это не недопустимое. Кто-либо может пролить некоторый свет на за и против этого приема?
Если Ваш объект выполняет очень сложные операции, которые чрезвычайно трудно протестировать через ограниченный открытый интерфейс, опция состоит в том, чтобы факторизовать часть той сложной логики в служебные классы, которые инкапсулируют определенные задачи. Вы можете затем тест единицы те классы индивидуально. Это всегда - хорошая идея организовать Ваш код в легко удобоваримые блоки.
Мое чувство лично состоит в том, что при тестировании открытого интерфейса не достаточно для соответствующего тестирования закрытых методов, вероятно, необходимо анализировать класс далее. Мое обоснование: закрытые методы должны делать только достаточно для поддержки всех примеров использования открытого интерфейса.
Но мой опыт с поблочным тестированием является (к сожалению), тонким; если кто-то может обеспечить востребованный пример, где большой блок частного кода не может быть выделен, я, конечно, готов пересмотреть!
Существует несколько возможных подходов. предположение Вашего класса X:
Мое мнение не, обычно они не должны быть протестированы непосредственно.
Модульные тесты являются белым полем с более высокой точки зрения системы, но они должны быть черным квадратом с точки зрения протестированного интерфейса класса (его открытые методы и их ожидаемое поведение).
Так, например, строковый класс (которому не был бы нужен символ прежней версии* поддержка):
Это позволяет Вам осуществлять рефакторинг реализацию почти, не касаясь тестов позже
Это помогает Вам уменьшить связь путем осуществления обязанностей по классу
Это делает Ваши тесты легче поддержать
Исключение для довольно сложных вспомогательных методов, которые требуется проверить более тщательно.
Но затем, это может быть подсказкой, что эта часть кода должна быть "официальной", обнародовав его статичный или извлеченный в ее собственном классе с ее открытыми методами.
Если Вы не делаете библиотеку общего назначения, необходимо попытаться ограничить то, что Вы создали, для какого Вы будете использовать. Расширитесь, поскольку Вам нужен он. По сути, у Вас должно быть полное покрытие кода, и необходимо протестировать все это.
Возможно, Ваш код является немного вонючим? Время это для рефакторинга? Если у Вас есть большой класс, делающий много вещей внутренне, возможно, он должен быть поврежден в несколько меньших классов с интерфейсами, которые Вы могли протестировать отдельно.
Я сказал бы для использования инструмента покрытия кода, чтобы проверить, функционируют ли они, уже тестируются так или иначе.
Теоретически, если Ваш общедоступный API проходит все тесты затем, закрытые функции хорошо работают, пока каждый возможный сценарий покрыт. Это - основная проблема, я думаю.
Я знаю, что существуют инструменты для той работы с C/C++. CoverageMeter является одним из них.
Я всегда думал, что это имело бы тенденцию вставать на свое место при использовании разработки через тестирование. Существует два способа приблизиться к разработке, или Вы запускаете со своего открытого интерфейса и пишете новый тест перед каждым дополнением к сложным закрытым методам, или Вы начинаетесь, работая над сложным материалом как общественность и затем осуществляете рефакторинг код для создания методов частными и тесты, которые Вы уже записали для использования нового открытого интерфейса. Так или иначе необходимо получить полный охват.
Конечно, мне никогда не удавалось записать целое приложение (или даже класс) строгим tdd способом, и рефакторинг сложного материала в служебные классы является способом пойти, если это возможно.
Вы могли всегда использовать компиляцию, передвигают частное: как
#if определил (UNIT_TEST)
Или с инструментами покрытия кода проверяют, что Ваше поблочное тестирование Ваших государственных функций полностью осуществляет частные.
Да Вы должны. Его названное тестирование методом "белого ящика", это означает, что необходимо знать, что много о внутренностях программы тестирует его правильно.
Я создал бы общедоступные 'тупики', которые вызывают закрытые функции для тестирования. #ifdef тупики так, чтобы можно было скомпилировать их, когда тестирование завершено.
Вы могли бы найти это продуктивным, для записи тестовой программы. В тестовой программе создайте класс, который использует класс, который будет протестирован как основа.
Добавьте методы к своему новому классу, для тестирования функций, которые не видимы в открытом интерфейсе. Имейте свою просто тестовую программу, назовите эти методы для проверки функций, которыми Вы обеспокоены.