Grails: ConfigObject.plus() недоступен в интеграционном тесте

#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 , чего нет в файле свойств конфигурации.