首页 > 解决方案 > 如何限制内部测试@Configuration 类仅适用于该类?

问题描述

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

标签: javaspring

解决方案


我找到了我喜欢MockObjectsConfig使用标准 Spring 上下文配置的模拟对象的单独类,然后将它与我的真实测试配置一起导入,从而找到了我喜欢模拟 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。


推荐阅读