如何限制内部测试@Configuration类仅适用于此类?

时间:2018-07-03 12:35:41

标签: java spring

用于集成测试的基础测试类可通过组件扫描(包括几乎所有软件包)导入基础配置。在一个测试类中,我想使用Mocs覆盖某些bean,但是会扫描此内部配置并覆盖所有测试的bean。有什么办法可以避免这种情况?

1 个答案:

答案 0 :(得分:2)

通过使用标准的Spring Context Configuration本质上有一个想要的模拟对象,并有了一个单独的MockObjectsConfig类,然后将其与我的真实测试配置一起导入,从而找到了我喜欢模拟bean的方式。如果您需要在其中防止冲突,也可以使用@Profile来对模拟bean进行注释,并使用@ActiveProfiles进行测试。

@Configuration
@Profile("!test")
public class MyRealConfigClass {

    @Bean
    public YetAnotherClass yetAnotherClass() {
        return new YetAnotherClass();
    }
}

@Configuration
@Profile("test")
public class MockObjectsConfig {

    @Bean
    public YetAnotherClass yetAnotherClass() {
        Mockito.mock(YetAnotherClass.class); // and add any thenReturns, answers, etc. here
    }    
}

然后将其包含在您的测试中,如下所示:

@RunWith(SpringRunner.class)
@ContextConfiguration(classes = { MyRealConfigClass.class, MockObjectsConfig.class)
@ActiveProfiles({"test"})
public class MyJunitTest {

    @Autowired
    private RestController restController;

}

然后将使用您的模拟bean,而不使用生产配置中的真实bean。