Junit使用啥来判断待测试代码是不是返回正确的结果
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Junit使用啥来判断待测试代码是不是返回正确的结果相关的知识,希望对你有一定的参考价值。
参考技术A unit被用来测试代码,并且它是由能够测试不同条件的断言方法(assertion method)组成,常用断言方法如下:assertEquals(a,b)
测试a是否等于b(a和b是原始类型数值(primitive value)或者必须为实现比较而具有equal方法)
assertFalse(a)
测试a是否为false(假),a是一个Boolean数值。
assertNotNull(a)
测试a是否非空,a是一个对象或者null。
assertNotSame(a,b)
测试a和b是否没有都引用同一个对象。
assertNull(a)
测试a是否为null,a是一个对象或者null。
assertSame(a,b)
测试a和b是否都引用同一个对象。
assertTrue(a)
测试a是否为true(真),a是一个Boolean数值。
我们使用这些方法来构建JUnit测试。
JUnit 是编写性能测试的正确工具吗? [关闭]
【中文标题】JUnit 是编写性能测试的正确工具吗? [关闭]【英文标题】:Is JUnit the right tool to write performance tests? [closed] 【发布时间】:2012-02-29 00:06:28 【问题描述】:在上周,我创建了两个课程,我的团队对它们的表现表示了一些担忧。为了评估我的代码,我编写了一些简单的 JUnit 测试,这些测试通过构建丰富的测试数据集来运行这些类,然后通过相关方法为数千次迭代提供这些数据。我记录了每次迭代的运行时间,然后使用循环和System.nanoTime()
记录了最高、最低和平均时间。最后,我让 JUnit 断言最高时间和平均时间在可接受的范围内。这种测试方法让我的团队对这段代码充满信心。
JUnit 是否适合以这种方式测试性能?是否有更好的工具来测试单元(方法和类)级别的性能?
【问题讨论】:
【参考方案1】:没有。 JUnit 是为单元测试而设计的。在用 Java 编写性能测试时,有很多事情需要注意。使用专为编写微基准测试而设计的Google Caliper。
看How do I write a correct micro-benchmark in Java?
【讨论】:
正是我要推荐的:) Google Caliper 似乎不是一个成功的项目。自 2 年以来,它们仍处于测试阶段。【参考方案2】:您的测试应该更好地定义为基准测试。是的,JUnit 可以以这种方式使用,尽管它不是最佳选择。但是您可以例如定义最大值。测试的评估时间,因此如果更改算法导致性能下降,则测试失败。使用@Test(timeout=12345)
进行配置。
如果您需要真正的性能测试,请考虑 JMeter。
【讨论】:
【参考方案3】:可能有更好的方法,但也有一些框架可以帮助使用 JUnit 实现基准测试。一些有用的做法是热身运行、统计评估。看看JUnitBenchmarks和JUnitPerf
EDIT 看起来 JUnitBenchmarks 已被弃用,因为问题已经说明。该项目的维护人员建议继续使用JMH。谢谢 Barry NL 的提醒。
【讨论】:
我接受了这一点,因为我和我的团队对 JUnit 与这些选项的集成有着强烈的亲和力。 @Pangea 对于没有 Junit 集成的基准测试有一个很好的答案。 我们的项目已经为我们所有的单元测试实现了 JUnit。使用 JUnitPerf 框架将它们扩展到性能测试非常简单且有意义。 酷,很高兴这个答案仍然有用:) 关于 JUnitBenchmarks:“该项目已被 JMH 弃用。”可以在这里找到:openjdk.java.net/projects/code-tools/jmh【参考方案4】:JUnit 更适合单元测试,也许在这种情况下 TestNG 会是更好的选择,尤其是它的@Dataprovider
功能:
//This method will provide data to any test method that declares that its Data Provider
//is named "test1"
@DataProvider(name = "test1")
public Object[][] createData1()
return new Object[][]
"Cedric", new Integer(36) ,
"Anne", new Integer(37),
;
//This test method declares that its data should be supplied by the Data Provider
//named "test1"
@Test(dataProvider = "test1")
public void verifyData1(String n1, Integer n2)
System.out.println(n1 + " " + n2);
这里是specific doc。
【讨论】:
JUnit 支持非常相似的@Parameterized。以上是关于Junit使用啥来判断待测试代码是不是返回正确的结果的主要内容,如果未能解决你的问题,请参考以下文章