Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在组件测试中动态排除spring启动配置类_Java_Spring_Spring Boot - Fatal编程技术网

Java 如何在组件测试中动态排除spring启动配置类

Java 如何在组件测试中动态排除spring启动配置类,java,spring,spring-boot,Java,Spring,Spring Boot,我使用一堆Spring Boot应用程序。它们有一系列在启动时运行的配置类。每个应用程序都可以使用“@EnableAutoConfiguration(exclude=…”机制从自动配置中排除某些类 例如,其中一个应用程序具有以下注释: @EnableAutoConfiguration(exclude = { DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class, CassandraDataAutoCo

我使用一堆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
注释上的测试属性或注释属性来完成此任务?

通过使用
@ActiveProfiles(“test”)
注释测试,并使用
@profile(“!test”)注释配置类来使用概要文件进行测试

对于库配置类,可以模拟bean:

@MockBean
private SomeClass someClass;

下面是关于这个主题的更多内容:

实际上,我想我能够以一种更简单的方式完成这项工作。我需要几分钟才能确定,但只需将“spring.autoconfigure.exclude=”设置添加到“properties”@SpringBootTest注释的属性,我认为这将满足我的需要。正如你所说的,有几种方法可以实现这一点。它让我更接近,但不是全部。