我怎样才能宣布" mixins"对于JUnit测试?

时间:2014-11-26 15:24:36

标签: java junit annotations interceptor

我的项目中有很多JUnit测试。其中一些有一些副作用,可以影响其他测试的执行。例如,他们打开数据库连接并忘记关闭它们,然后在某些时候测试开始失败,因为它们达到了极限。我以为我可以使用一些mixins进行测试,我可以这样使用......

@CheckThatConnectionsAreClosed
@LogExecutionTime
@Test
public void testSomething() {
    // ...
    sessionFactory.openSession(); // hey look! I didn't close it!
    // ...
}

...所以当我运行它时,我会收到一个断言错误以及有关执行时间的信息。

我的意思是,检查连接是否已关闭很简单,但在每个测试类或方法中手动将代码放到@Before@After方法似乎是一个坏主意。

我认为那些注释将是有效的方法拦截器,我想可以使用自定义测试运行器。但也许有一些更简单的方法来实现这一目标?或者它已经在一些好的库中完成了?

3 个答案:

答案 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