繁体   English   中英

如何在组件测试中动态排除Spring Boot配置类

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM