【发布时间】:2017-08-09 09:49:48
【问题描述】:
我有几个在 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 为测试准确创建的上下文)。我只是通过检查 bean 具有不同的哈希码才发现这一点。
当我使用@EventListener 时,它变得非常重要。因为调用了错误上下文(已经完成执行的测试类的上下文)的侦听器,并且我在那里有错误的 bean。
有什么解决方法吗?
我尝试将所有 @MockBean 声明移至基本类,它工作正常,因为未创建新上下文。但是,它使基础课太重了。 另外,我试图为这个测试创建一个脏上下文,但是下一个测试失败并显示上下文已经关闭的消息。
【问题讨论】:
-
错误地在您的帖子中发布了另一个问题的答案。对不起!我删了。
标签: java spring mockito spring-test springmockito