Я вижу ошибку в следующей строке:
@ContextConfiguration(classes = [AmazonS3Config::class, VqsS3FileReader::class])
Пожалуйста, введите здесь configuration классы (а не только бобы).
Short-hot исправить тест
Создать класс (если отсутствует), например VqsS3Configration в основном модуле (например, в модуле, где у вас есть производственный код)
Создать класс, например VqsS3TestConfigration, в том же пакете с ваши тесты. Содержимое этого файла:
@org.springframework.context.annotation.Configuration // mark, that this is configuration class
@org.springframework.context.annotation.Import(VqsS3Configration::class) // it references production configuration from test configuration
@org.springframework.context.annotation.ComponentScan // ask Spring to autoload all files from the package with VqsS3TestConfigration and all child packages
class VqsS3TestConfigration {
/*put test-related beans here in future*/
}
Затем перейдите к тесту и измените объявление:
@ContextConfiguration(classes = [VqsS3TestConfigration ::class]) // we ask Spring to load configuration here
Я создал образец приложения здесь: https://github.com/ imanushin / spring-boot2-junit5-and-kotlin-integration
Пожалуйста, используйте строку .\gradlew.bat test
или gradlew.bat bootRun
в папке src. Тест проверит, что мы можем читать свойства. bootRun будет печатать автоматически загруженные свойства
Теория расточки
Прежде всего - Spring имеет классы конфигурации - они необходимы для загрузки и инициализации других классов. Вместо классов Service или Comonent основная цель классов конфигурации - просто создавать сервисы, компоненты и т. Д.
Если мы упростим алгоритм загрузки приложения Spring, это будет следующим:
3.1. Для классов, которые аннотируются с помощью @ConfigurationProperties, введите здесь пункты конфигурации
3.2. Для классов, которые аннотируются с помощью @RestController, зарегистрируйте их как контроллеры отдыха
3.N. и т. д. ...
Как понимает Spring, какая конфигурация должна быть загружена?
@ContextConfiguration
атрибут @Import
аннотацию, затем она получает детей, затем проверяет их импорт и т. д.). Поэтому в нашем случае Spring будет делать такие действия: