其他分享
首页 > 其他分享> > 在每次春季启动时都覆盖一个@Configuration类@Test

在每次春季启动时都覆盖一个@Configuration类@Test

作者:互联网

在我的春季启动应用程序中,我想在我的所有测试中覆盖一个带有测试配置的@Configuration类(特别是我的@EnableAuthorizationServer @Configuration类).

到目前为止,在概述了spring boot testing featuresspring integration testing features之后,没有出现直接的解决方案:

> @TestConfiguration:它用于扩展,而不是覆盖;
> @ContextConfiguration(classes = …)和@SpringApplicationConfiguration(classes = …)让我覆盖整个配置,而不仅仅是一个类;
>建议@Test内部的@Configuration类覆盖默认配置,但不提供示例;

有什么建议么?

解决方法:

内部测试配置

测试的内部@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 @Profile(“test”)定义一个独立的Configuration类.然后,让您的测试类使用@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();
    }
}

@主

bean定义上的@Primary注释是为了确保如果找到多个,那么这个注释将具有优先级.

标签:spring,spring-boot,spring-test
来源: https://codeday.me/bug/20190928/1826971.html