一尘不染

如何在Spring Boot JUnit测试中排除* AutoConfiguration类?

spring

我试过了:

@RunWith(SpringJUnit4ClassRunner.class)
@EnableAutoConfiguration(exclude=CrshAutoConfiguration.class)
@SpringApplicationConfiguration(classes = Application.class)
@WebAppConfiguration
public class LikeControllerTest {

但是,CRaSSHD仍会启动。虽然目前它不会损害测试,但我想在单元测试期间禁用不必要的模块,以加快速度并避免潜在的冲突。


阅读 921

收藏
2020-04-16

共2个答案

一尘不染

最佳答案并不指向更简单,更灵活的解决方案。

@TestPropertySource(properties=
{"spring.autoconfigure.exclude=comma.seperated.ClassNames,com.example.FooAutoConfiguration"})
@SpringBootTest
public class MySpringTest {...}

测试类上方的注释。这意味着其他测试不受当前测试的特殊情况的影响。如果存在影响大多数测试的配置,请考虑使用spring配置文件代替当前的最佳答案。

2020-04-16
一尘不染

我有一个类似的用例,我想隔离地测试一个Spring Boot配置的存储库(在我的情况下,没有Spring Security自动配置,这会使我的测试失败)。@SpringApplicationConfiguration用途SpringApplicationContextLoader,并且有一个JavaDoc说明

可用于测试非Web功能(例如存储库层)或启动完全配置的嵌入式Servlet容器。

但是,就像你自己一样,我无法弄清楚如何配置测试以仅使用主要配置入口点(即,使用的方法)来测试存储库层@SpringApplicationConfiguration(classes = Application.class)

我的解决方案是创建一个专用于测试的全新应用程序上下文。所以在src / test / java中,我在名为repo的子包中有两个文件

  1. RepoIntegrationTest.java
  2. TestRepoConfig.java

哪里RepoIntegrationTest.java

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = TestRepoConfig.class)
public class RepoIntegrationTest {

并且TestRepoConfig.java

@SpringBootApplication(exclude = SecurityAutoConfiguration.class)
public class TestRepoConfig {

这让我摆脱了麻烦,但是如果Spring Boot团队的任何人都可以提供替代的推荐解决方案,那将非常有用

2020-04-16