一尘不染

在每个spring boot @Test上重写单个@Configuration类

spring

在我的spring boot应用程序中,我想在所有@Configuration测试中仅使用测试配置(尤其是我的@EnableAuthorizationServer @Configuration类)覆盖我的一个类。

到目前为止,在对Spring Boot测试功能和Spring Integration测试功能进行概述之后,还没有一个简单的解决方案浮出水面:

  • @TestConfiguration:用于扩展,而不是覆盖;
  • @ContextConfiguration(classes=…​)@SpringApplicationConfiguration(classes =…​)让我重写整个配置,而不仅仅是一个类;
  • 建议使用@Configurationa 内部的类@Test来覆盖默认配置,但未提供示例。
    有什么建议?

阅读 748

收藏
2020-04-19

共1个答案

一尘不染

内部测试配置

用于测试的内部@Configuration的示例:

@RunWith(SpringRunner.class)
@SpringBootTest
public class SomeTest {

    @Configuration
    static class ContextConfiguration {
        @Bean
        @Primary //may omit this if this is the only SomeBean defined/visible
        public SomeBean someBean () {
            return new SomeBean();
        }
    }

    @Autowired
    private SomeBean someBean;

    @Test
    public void testMethod() {
        // test
    }
}

可重复使用的测试配置

如果你希望将测试配置重用于多个测试,则可以使用Spring Profile定义一个独立的Configuration@Profile("test")。然后,让你的测试班级通过激活配置文件@ActiveProfiles("test")。查看完整的代码:

@RunWith(SpringRunner.class)
@SpringBootTests
@ActiveProfiles("test")
public class SomeTest {

    @Autowired
    private SomeBean someBean;

    @Test
    public void testMethod() {
        // test
    }
}

@Configuration
@Profile("test")
public class TestConfiguration {
    @Bean
    @Primary //may omit this if this is the only SomeBean defined/visible
    public SomeBean someBean() {
        return new SomeBean();
    }
}

@Primary

@Primary对bean定义标注为确保这一具有优先权如果不止一个被发现。

2020-04-19