当前位置: 首页 > 知识库问答 >
问题:

如何为JUnit测试声明“mixin”?

缪志新
2023-03-14

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

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

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

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

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

共有3个答案

包和泰
2023-03-14

看起来你要找的东西叫做方面。使用Aspect可以定义在特定情况下运行的拦截器。

查看这个链接——它是关于如何让JUnit在每次测试方法调用之前使用执行的方面:AspectJ JUnit Maven——测试中可以识别切入点,但没有抛出任何方法错误:aspectOf()异常

安浩瀚
2023-03-14

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

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

卢树
2023-03-14

这听起来像是一条定制规则。规则旨在作为可重用的设置/拆卸功能的一部分,以避免使用前/后或自定义运行器。

 类似资料:
  • 我在4.10版本中使用junit,在1.3版本中声明了hamcrest核心,在1.3版本中声明了hamcrest库。我的问题是hamcrest库和hamcrest核心是否嵌入junit 4.10。那么junit 4.11呢?

  • 问题内容: 我想在两个小数点后两位之间使用断言,我使用这个: 但是JUnit日志显示: 问题答案: 测试两个对象是相同的对象,即它们是: 断言两个对象引用相同的对象。如果它们不相同,则会抛出一个没有消息的消息。 在您的情况下,由于和都是new ,所以对象不相同,因此是例外。 您要使用,测试两个对象是否相等,即: 断言两个对象相等。如果不是,则会抛出一个不带消息的消息。如果期望和实际相等,则认为它们

  • 有没有办法集成测试我的JUnit Jupiter扩展?当然,我可以测试扩展用法的一个很好的例子,但我想测试如下内容: 它没有通过预期的测试吗? 测试结束时写的报告是否正确? 对此有内置的支持吗?

  • 我有一个程序,显示与名称和用户需要输入他们的字段。我怎么测试这个? AssertionError:JSON路径“$.FirstName”处没有值,异常:JSON不能为null或空 我的测试: storetest.java

  • 问题内容: 我有这些值来自测试 我尝试 我得到了,关于调试是。 我怎样才能断言超越使用条件 问题答案: 只是您的操作方式。还有一个过载,如果发生故障,消息是;如果要打印某某某物的大小不超过某某某物的大小,则可以使用它。 您也可以添加依赖项以使用匹配器。参见https://code.google.com/p/hamcrest/wiki/Tutorial: 这给出了类似的错误:

  • 问题内容: 我有一个Java命令行程序。我想创建JUnit测试用例以进行模拟。因为当我的程序运行时,它将进入while循环并等待用户输入。如何在JUnit中模拟呢? 问题答案: 从技术上讲,可以进行切换,但是总的来说,不直接在代码中调用它,而是添加一层间接层,这样输入源就可以从应用程序的某个位置进行控制,这样会更健壮。确切地讲,这是实现的详细信息-依赖项注入的建议很好,但是你不一定需要引入第三方框