我在 Spring Framework 上运行了几个集成测试,这些测试扩展了名为BaseITCase的基类。
像这样:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {AppCacheConfiguration.class, TestConfiguration.class}, loader = SpringBootContextLoader.class)
@Transactional
@WebMvcTest
public abstract class BaseITCase{...}
...
public class UserControllerTest extends BaseITCase {...}
问题是其中一个测试有几个声明: @MockBean 在其中,并且在执行该测试的那一刻,Spring 重新创建上下文,并且此测试之后的测试有时会使用错误的 bean(来自使用 @ 完全为测试创建的上下文模拟豆)。我只是通过检查 bean 具有不同的哈希码才发现这一点。
当我使用@EventListener 时,它变得非常重要。因为调用了错误上下文(已经完成执行的测试类的上下文)的侦听器,并且我在那里有错误的 bean。
有什么解决方法吗?
我尝试将所有 @MockBean 声明移至基本类,它工作正常,因为没有创建新的上下文。但是,它使基础课太重了。另外,我试图为这个测试创建一个脏上下文,但是下一个测试失败并显示上下文已经关闭的消息。