junit 如何根据测试重新定义spybean?

nnt7mjpx  于 2022-11-11  发布在  其他
关注(0)|答案(1)|浏览(182)

我用spyBean做了一个SpringBootTest:

@SpyBean
private MyProperties myProperties;

我想在myProperties中使用不同的值来测试组件的行为。但是,我注意到,当我在一个测试中更改myProperties的值时,下一个测试将获得上一个测试中设置的值,当我尝试重置该值时:

@BeforeEach
void setUp() {
   myProperties = new MyProperties();
}

单个测试中的后续变更没有影响。

5kgi1eie

5kgi1eie1#

@MockBean@SpyBean对spring上下文创建示例进行模拟/监视,并且在运行多个集成测试时缓存spring上下文修复此问题一种方法是在下一个测试中添加@DirtiesContext,但不建议这样做,因为这会降低测试速度其他解决方案可以是在下一个测试中使用ReflectionTestUtils注入myProperties,如下所示

@BeforeEach
void setUp() {
    myProperties = new MyProperties();
    ReflectionTestUtils.setField(classInstance,"myProperties", myProperties);
}

相关问题