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



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

我找到了我喜欢模拟豆子的方式,基本上有一个单独的MockObjectsConfig类,其中包含我想要的模拟对象,使用标准的 Spring 上下文配置,然后将其与我真正的测试配置一起导入。您还可以用@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。

相关内容

最新更新