SpringApplicationBuilder не загружается во время интеграционных тестов с JUnit SpringRunner
Это мой первый вопрос на stackru.com.
В последнее время я искал способ изменить, как Spring Boot (2.x) называет свои bean-компоненты, созданные с помощью аннотации @Component (и т. Д.).
Я обнаружил класс SpringApplicationBuilder, который, к счастью, позволяет внедрить пользовательский генератор имен компонентов:
public class Application {
public static void main(String[] args) {
new SpringApplicationBuilder(Application.class)
.beanNameGenerator(customBeanNameGenerator)
.run(args);
}
}
Но проблема в том, что, несмотря на то, что это решение работает для производства, оно не работает в модульных тестах JUnit 4.0, где JUnit Runner SpringRunner воссоздает Spring Context для целей тестирования - в этом случае SpringApplicationBuilder вообще не используется, и в результате запуск нашего приложения завершился неудачно из-за проблем с кандидатами в autowiring multi-beans.
@RunWith(SpringRunner.class)
@SpringBootTest(classes= {Application.class} )
public class SomeControllerTest {
...
}
Есть ли какой-нибудь элегантный способ заставить эти модульные тесты использовать SpringApplicationBuilder?
С уважением.
1 ответ
Свойство "classes" @SpringBootApplication использует только аннотации классов. поэтому код для сборки SpringApplication не работает при запуске тестов.
если вы хотите решить эту проблему, вы можете попробовать другие способы, такие как указание nameGenerator в @ComponentScan
@ComponentScan(nameGenerator = CustomBeanNameGenerator.class)
public class Application {
public static void main(String[] args) {
new SpringApplicationBuilder(Application.class)
.run(args);
}
}
убедитесь, что класс CustomBeanNameGenerator имеет пустой конструктор.
PS: английский не мой родной язык; пожалуйста, извините за ошибки при печати.