在测试中使用@MockBean强制重新加载应用程序上下文
我在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(从为测试创建的上下文@MockBean)。我只是通过检查豆子具有不同的哈希码才发现的。
当我使用@EventListener时,它变得非常关键。因为调用了错误上下文(已完成执行的测试类的上下文)的侦听器,而我在那里有错误的bean。
有什么解决方法吗?
我试图将所有@MockBean声明移动到基本类,它工作正常,因为没有创建新的上下文。但是,它使基本类太重了。另外,我试图为此测试创建一个脏上下文,但随后下一个测试失败,并显示上下文已关闭的消息。