美文网首页
如何运行每个测试方法后重置spring上下文

如何运行每个测试方法后重置spring上下文

作者: 流沙飞雪 | 来源:发表于2019-04-17 14:43 被阅读0次

1.背景

项目中在写测试用例的时候遇到了一个问题,我用spring初始化的h2数据库,当前一个测试用例运行过后,数据被修改,就变成了脏数据,如果后一个测试用例再使用这条数据就可能无法通过测试。同样,如果前一个用例修改了spring的bean属性,后面一个测试用例同样会有问题。基于这样的情况,我可能希望每次运行测试用例spring的上下文都能被重新初始化一下,这样可以保证一个清洁的spring上下文环境。

2.@DirtiesContext

于是我现了spring提供了@DirtiesContext这样一个注解。@DirtiesContext是一个spring测试注释,用于指示应在每次测试运行后删除并重新加载应用程序上下文缓存。 删除的应用程序上下文也将被关闭。@DirtiesContext可以在方法级别和类级别声明。

3.@DirtiesContext工作流程

如果测试方法使用@DirtiesContext注释,或者测试类使用@DirtiesContext注释并且classMode设置为ClassMode.AFTER_EACH_TEST_METHOD,则测试上下文的应用程序上下文将被标记为脏并关闭。
如果在类级别声明@DirtiesContext且classMode设置为ClassMode.AFTER_CLASS,则在运行测试类的所有测试之后将关闭应用程序上下文。


image.png

4.解决问题

所以根据上面的了解,我只需要在每个类上增加@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)即可保证每次运行测试用例都会重新初始spring上下文。

5.最后

虽然使用@DirtiesContext,可以保证每个test class的执行上下文的独立性、隔离性,但是也会有让测试运行速度变慢的副作用。所以在使用@DirtiesContext前,弄清楚你是否真的需要使用它。

具体示例参考
https://www.javarticles.com/2016/03/spring-dirtiescontext-annotation-example.html

相关文章

网友评论

      本文标题:如何运行每个测试方法后重置spring上下文

      本文链接:https://www.haomeiwen.com/subject/ysigwqtx.html