给出以下类定义:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT, classes = Application.class)
@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_CLASS)
public class ErrorHandlerTest{
@MockBean
private ErrorHandler errorHandler;
@MockBean
带注释的类ErrorHandler
的成功注入取决于所有测试的执行顺序。由于该类的DirtiesContext设置为BEFORE_CLASS
,因此我不希望其他类产生副作用。
起初,我以为DirtiesContext可能会覆盖模拟的Bean,但是当测试成功地独立执行时(或以正确的顺序执行),并且没有任何迹象表明存在实际的新上下文。我无视那个想法。
如果测试前的类用DirtiesContext.ClassMode.AFTER_CLASS
注释,则将注入模拟的Bean。
为什么在上课前不使用AFTER_CLASS
,而当前班上不使用BEFORE_CLASS
?
@@ BeforeClass用于测试中的代码初始化,而@ AfterClass用于代码上下文清除。
标记为@@ Before的代码在每次测试之前执行,而@@ BeforeClass在整个测试装置之前运行一次。
在您的情况下,您正在寻找清理上下文,而不是在测试执行之前初始化参数,因此@ AfterClass是可行的。