【问题标题】:How can I declare "mixins" for JUnit tests?如何为 JUnit 测试声明“mixins”?
【发布时间】:2014-11-26 15:24:35
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: java junit annotations interceptor


    【解决方案1】:

    听起来好像自定义Rule 将是要走的路。规则旨在作为可重用设置/拆卸功能的一部分,以避免必须使用 Before/After 或自定义 Runners。

    【讨论】:

    【解决方案2】:

    您可以在该 junit 测试中使用 @AfterClass@After 注释并在那里实现 checkConnection

    http://junit.sourceforge.net/javadoc/org/junit/After.html http://junit.sourceforge.net/javadoc/org/junit/AfterClass.html

    【讨论】:

    • 其实这就是我想要避免的。我知道它会起作用,但我想创建在所有测试中表现一致的拦截器。
    【解决方案3】:

    您要查找的内容似乎称为 Aspects。 使用 Aspect,您可以定义一个在特定情况下运行的拦截器。

    查看这个链接 - 它是关于如何让 JUnit 在每个测试方法调用之前执行方面的工作: AspectJ + Junit + Maven - pointcut recognized in tests but NoSuchMethodError: aspectOf() exception thrown

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-13
      • 1970-01-01
      • 1970-01-01
      • 2021-02-03
      • 2022-11-04
      • 1970-01-01
      • 2020-06-27
      • 1970-01-01
      相关资源
      最近更新 更多