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