![](/img/trans.png)
[英]How to exclude *AutoConfiguration classes in Spring Boot JUnit tests?
[英]How to dynamically exclude spring boot configuration classes in component tests
我使用一堆Spring Boot应用程序。 他们有一堆在启动时运行的配置类。 每个应用程序都可以使用“ @EnableAutoConfiguration(exclude=...
”机制)从自动配置中排除某些类。
例如,其中一个应用程序具有以下注释:
@EnableAutoConfiguration(exclude = { DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class,
CassandraDataAutoConfiguration.class, CassandraRepositoriesAutoConfiguration.class })
这些被排除在外,因为此应用程序不使用那些框架。 但是,此应用程序确实使用Hazelcast,因此该列表中不包括“ HazelcastAutoConfiguration.class
”。
每个应用程序还具有“组件”测试,介于单元测试和集成测试之间。 他们至少使用以下注释:
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
组件测试的重点是测试整个应用程序,但要对网络依赖项进行模拟和存根。 在这种情况下,我们必须阻止应用程序进行Hazelcast连接。 如果我暂时将“ HazelcastAutoConfiguration.class
”添加到排除列表中,这会使组件测试正常进行,但是,当然,该应用程序将无法正常工作。
我需要某种方法来使应用程序在组件测试中排除Hazelcast配置器,但将其包括在正常操作中。
我相信可以通过多种方式来完成此任务。 有人可以详细说明我的选择吗? 我相信这些选项之一就是“配置文件”,但是我不确定在这里如何工作。
更新 :
最初,我认为我可以通过执行以下操作来实现:
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,
properties = {"spring.autoconfigure.exclude = " +
"org.springframework.boot.autoconfigure.hazelcast.HazelcastAutoConfiguration"})
但是我发现它仍然在调用HazelcastClientConfiguration
。 然后,我发现CacheAutoConfiguration
也引用了此配置类,因此我将该类添加到了排除列表中。 这种工作,但现在我得到了:
IllegalStateException: No CacheResolver specified, and no bean of type CacheManager found. Register a CacheManager bean or remove the @EnableCaching annotation from your configuration.
我是财产驱动绳的末端吗? 有没有一种最简单的方法可以通过@SpringBootTest
批注中的测试属性或批注属性来解决此@SpringBootTest
?
通过使用@ActiveProfiles("test")
注释测试来使用配置文件进行测试,并通过@Profile("!test")
注释配置类来使用配置文件。
对于库配置类,您可以模拟Bean:
@MockBean
private SomeClass someClass;
这是有关此主题的更多信息: https : //www.baeldung.com/java-spring-mockito-mock-mockbean
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.