SpringJUnit4ClassRunner每次测试都会加载上下文吗,还是只加载一次类?

13 浏览
0 Comments

SpringJUnit4ClassRunner每次测试都会加载上下文吗,还是只加载一次类?

我的问题是有些测试失败了。我认为一个函数破坏了上下文,导致测试失败。

Spring是为每个测试加载新的上下文,还是为每个测试类加载一次,还是只在测试运行时加载一次上下文?

0
0 Comments

问题的出现原因是SpringJUnit4ClassRunner默认只在每个测试套件中加载一次上下文,而不是每个测试都加载一次。这样可以节省每次测试的启动时间,提高测试的执行效率。如果一个测试破坏了应用上下文并需要重新加载,可以通过配置TestContext框架,在执行下一个测试之前重新加载配置并重建应用上下文。

解决方法是在测试类上使用`@DirtiesContext`注解。这样可以告诉SpringJUnit4ClassRunner在每个测试之后都重新加载上下文。示例代码如下:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = MyConfig.class)
@DirtiesContext
public class MyTest {
    // tests
}

使用`@DirtiesContext`注解后,每次运行测试都会重新加载上下文,确保每个测试都是在新的上下文中执行。这可能会降低测试的执行效率,但可以确保测试之间的互不干扰。

0