#unit-testing #testing #grails #missingmethodexception
#модульное тестирование #тестирование #grails #исключение missingmethodexception
Вопрос:
Я тестирую службу, которая использует атрибуты конфигурации и объединяет ее в строку, например:
GrailsConfig.config.test.directory System.getProperty('file.separator')
<filename>
При запуске теста для вышеуказанного метода, содержащего приведенный выше код, я получаю следующую ошибку:
groovy.lang.MissingMethodException: No signature of method:
groovy.util.ConfigObject.plus() is applicable for argument types:
(java.lang.String) values: []
Почему оператор plus недоступен в моем интеграционном (или модульном) тесте ?!
Любая помощь приветствуется
Джонас
Ответ №1:
Это ошибка, которую вы видите, когда вы не определили переменную конфигурации. Вероятно, вы определили test.directory
в другой среде, но не в test
среде.
В модульном тестировании вы должны использовать mockConfig, как следует из ответа Дона, но в интеграционном тестировании вы можете использовать grails configuration framework так же, как и при запуске приложения.
Ответ №2:
Я предполагаю GrailsConfig.config.test.directory
, что должен возвращать строку, но вместо этого она возвращает a ConfigObject
(что не перегружает оператор ). Я никогда не пробовал использовать GrailsConfig
в интеграционном тестировании, поэтому я не знаю, будет ли этот код работать.
Лучшим подходом может быть имитация значений конфигурации с использованием mockConfig вместо этого.
Ответ №3:
Хорошо, я нашел проблему… При использовании все строковые атрибуты должны быть в кавычках mockConfig
, чего нет в файле свойств конфигурации.