我使用一堆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
批注中使用测试属性或批注属性来解决此问题?
答案 0 :(得分:0)
使用配置文件进行测试,方法是使用@ActiveProfiles("test")
注释测试,并使用@Profile("!test")
注释配置类。
对于库配置类,您可以模拟Bean:
@MockBean
private SomeClass someClass;
有关此主题的更多信息:https://www.baeldung.com/java-spring-mockito-mock-mockbean