Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我能把JUnit说得更详细些吗?_Java_Junit - Fatal编程技术网

Java 我能把JUnit说得更详细些吗?

Java 我能把JUnit说得更详细些吗?,java,junit,Java,Junit,我想让它在assert语句成功时大叫“万岁”,或者至少让它显示遇到的成功assert语句的数量 我正在使用JUnit4 有什么建议吗?junit的javadoc不幸地说,只记录失败的断言 所以这似乎是不可能的我很确定您可以创建一个定制的TestRunner来实现这一点。在我们自制的单元测试框架中,我们最终得到了类似的东西——NUnit的克隆 哦,等等——现在我又在读你的问题了,如果你真的希望每个成功的断言都有结果,那么你就必须进一步挖掘管道。TestRunner对于每个testcase开始/结束

我想让它在assert语句成功时大叫“万岁”,或者至少让它显示遇到的成功assert语句的数量

我正在使用JUnit4


有什么建议吗?

junit的javadoc不幸地说,只记录失败的断言


所以这似乎是不可能的

我很确定您可以创建一个定制的TestRunner来实现这一点。在我们自制的单元测试框架中,我们最终得到了类似的东西——NUnit的克隆

哦,等等——现在我又在读你的问题了,如果你真的希望每个成功的断言都有结果,那么你就必须进一步挖掘管道。TestRunner对于每个testcase开始/结束只调用一次,因此它将计算通过和失败的测试,而不是断言


这对我来说不是什么大问题,因为我通常倾向于每个测试一个断言。

很难做到。所有assert方法都是assert类的静态成员,这意味着统计成功和失败测试的RunNotifier不在范围之内

如果您不避免一个ungle黑客:从JUnit中获取源代码,在运行测试时将它们存储在静态字段中存储当前通知器,这样静态方法就可以向这个通知器报告成功的断言。

您能考虑吗?

1下载junit源代码
2要修改org.junit.Assert类,进行您想要的任何修改

可以将AOP与Spring或AspectJ一起使用,在junit.framework.Assert类中的所有Assert方法上定义切入点。使用spring,您可以在返回通知后实现自己的类,只有当assert方法通过时才会调用该通知,否则它会引发异常:junit.framework.AssertionFailedError
. 在您自己的类中,您可以实现一个简单的计数器,并在最后打印它。

您真的对成功的断言感兴趣吗?通常,唯一有趣的断言是失败的断言

作为一名狂热的JUnit爱好者,我尝试让测试的输出尽可能安静,因为它可以在某些东西不通过时提高信噪比。最好的测试运行是所有测试都通过,并且没有来自stdout的窥视


您可以一直进行单元测试,直到它成功并运行grep Assert test.java | wc-l:-

如果希望看到每个成功断言的输出,另一种不需要外部依赖项或源代码的简单方法是定义自己的断言类,该类将所有方法委托给标准JUnit断言类,除了记录成功的断言之外,JUnit类还会像往常一样报告失败的断言

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


然后,您还可以轻松地将您的方法迁移到“更安静的更好”阵营,并将包装器类更改为只报告每个测试或每个类通过的断言的总数,等等。

我不认为,JUnit的目标是统计匹配的断言或打印更详细的信息。 如果测试是原子的,您将在其中获得大部分信息。所以我会检查我的测试


您还可以在JUnit中建立日志文件。这是可能的,但它会降低测试执行性能…

添加一些信息,这些信息在我希望JUnit更加详细并且偶然发现这个问题时会对我有所帮助。也许将来它会帮助其他测试人员

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

<junit showoutput="true" printsummary="on" enabletestlistenerevents="true" fork="@{fork}" forkmode="once" haltonfailure="no" timeout="1800000">

当我的测试超时时,这对我很有用,我不确定哪些测试实际花费的时间太长,哪些测试被取消,因为它们在时间结束时不幸运行。

这不是对问题的直接回答,事实上是对junit功能的滥用,但如果需要调试断言中使用的某些值,则可以临时添加如下内容:

假设.AssumeTureInterestingData为false; 这不会使构建失败,但会将测试标记为已忽略,并将强制将值包括在测试报告输出中

❗️ 确保完成后删除这些语句。或者,您也可以将该语句更改为Aspect.AssumeTureInterestingData,如果将来可能需要再次调试它,则为true


很久以前就有人问过这个问题,只是想补充一下:

在build文件夹下以html格式生成报告,并在每次测试后刷新浏览器,不是更好吗

使用Gradle,因为它提供了对Junit开箱即用的集成插件的支持,我能够在我的项目中打开build/reports/tests/test/index.html文件,并在每个包、每个类和每个方法的基础上检查结果< /p> PS:如果页面变得烦人,您可以在浏览器中安装一个用于刷新页面的扩展

如果约束条件适用,希望这对某人有所帮助


,您可以找到有关如何为Junit测试结果生成报告的更多信息。

您到底为什么要这样做?我总是试图遵循沉默的原则,这就是为什么我在问,这可能是一种有用的方法,可以通过删除不可证实的断言来查看是否有人在调整测试用例以使其通过……因为当这个数字合法上升时,它会给我温暖的模糊感如果您有复杂的、长期运行的测试,可能需要一些进度指示useful@AllainLalonde-您是如何在控制台上显示输出的?我已经尝试了一些基本的例子,但我无法在控制台上显示输出。使用maven和surefire运行测试是否有等效的方法?
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