我可以让JUnit更详细吗?

All*_*nde 21 java junit

每当assert语句成功,或者至少让它显示遇到的成功断言语句的数量时,我想让它大喊大叫.

我正在使用JUnit4.

有什么建议?

Dov*_*man 13

如果你想看到每个成功断言的一些输出,另一个不需要外部依赖或源代码的简单方法,就是定义你自己的Assert类,它将所有方法委托给标准的JUnit Assert类,以及记录成功的断言(失败的断言将像往常一样由JUnit类报告).

然后,您可以从"org.junit.Assert"=>"com.myco.test.Assert"对测试类进行全局搜索和替换,这将修复所有常规和静态导入语句.

然后,您还可以轻松地将方法迁移到更安静的阵营,并更改包装类,以便仅报告每个测试或每个类的传递断言总数等.


rzr*_*yea 9

当我希望JUnit更加冗长和偶然发现这个问题时,添加一些对我有帮助的信息.也许它将来会帮助其他测试人员.

如果您正在从Ant运行JUnit,并希望查看正在运行的测试,则可以将以下内容添加到您的任务中:

<junit showoutput="true" printsummary="on" enabletestlistenerevents="true" fork="@{fork}" forkmode="once" haltonfailure="no" timeout="1800000">
Run Code Online (Sandbox Code Playgroud)

请注意,showoutput,printsummary和enabletestlistenerevents是有帮助的,而不是其他任务属性.如果你设置这些,你会得到如下输出:

Running com.foo.bar.MyTest
junit.framework.TestListener: tests to run: 2
junit.framework.TestListener: startTest(myTestOne)
junit.framework.TestListener: endTest(myTestOne)
junit.framework.TestListener: startTest(myTestTwo)
junit.framework.TestListener: endTest(myTestTwo)
Tests run: 2, Failures: 0, Errors: 0, Time elapsed: 0.495 sec
Run Code Online (Sandbox Code Playgroud)

当我的测试结束时,这对我很有用,而且我不确定哪些测试实际上花了太长时间,哪些测试被取消了,因为它们不幸的是在时间到了时运行.


tal*_*alg 5

您可以使用 AOP(使用 Spring 或 AspectJ)在 junit.framework.Assert 类中的所有断言方法上定义切入点。使用 spring,您可以在返回建议后实现自己的类(http://static.springframework.org/spring/docs/2.5.x/reference/aop.html#aop-advice-after-returning),它只会被调用如果 assert 方法通过(否则它会抛出异常: junit.framework.AssertionFailedError )。在您自己的课程中,您可以实现一个简单的计数器并在最后打印它。