我的项目中有很多JUnit测试。其中一些有一些副作用,可以影响其他测试的执行。例如,他们打开数据库连接并忘记关闭它们,然后在某些时候测试开始失败,因为它们达到了极限。我以为我可以使用一些mixins进行测试,我可以这样使用......
@CheckThatConnectionsAreClosed
@LogExecutionTime
@Test
public void testSomething() {
// ...
sessionFactory.openSession(); // hey look! I didn't close it!
// ...
}
...所以当我运行它时,我会收到一个断言错误以及有关执行时间的信息。
我的意思是,检查连接是否已关闭很简单,但在每个测试类或方法中手动将代码放到@Before
和@After
方法似乎是一个坏主意。
我认为那些注释将是有效的方法拦截器,我想可以使用自定义测试运行器。但也许有一些更简单的方法来实现这一目标?或者它已经在一些好的库中完成了?
答案 0 :(得分:2)
听起来好像是自定义Rule。规则旨在作为可重复使用的设置/拆卸功能的一部分,以避免必须使用之前/之后或自定义运行器。
答案 1 :(得分:1)
你可以在junit测试中使用@AfterClass
或@After
注释并在那里实现checkConnection
http://junit.sourceforge.net/javadoc/org/junit/After.html http://junit.sourceforge.net/javadoc/org/junit/AfterClass.html
答案 2 :(得分:0)
您正在寻找的东西似乎被称为Aspects。 使用Aspect可以定义在特定情况下运行的拦截器。
查看此链接 - 它'关于如何让JUnit在每个测试方法调用之前处理已执行的方面: AspectJ + Junit + Maven - pointcut recognized in tests but NoSuchMethodError: aspectOf() exception thrown