给出以下类定义:
@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
?
答案 0 :(得分:-1)
@BeforeClass 用于测试中的代码初始化,而 @AfterClass 用于代码上下文清除。
标记为 @Before 的代码在每次测试之前执行,而 @BeforeClass 在整个测试夹具之前运行一次。
在您的情况下,您希望清除上下文,而不是在测试执行之前初始化参数,因此 @AfterClass 可行。