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使用啥来判断待测试代码是不是返回正确的结果的主要内容,如果未能解决你的问题,请参考以下文章

软件测试作业三 尝试使用JUnit

JUnit-三角形判断测试

如何正确使用 MockMvc 在 Junit 中测试 post 方法?

你用啥来单元测试C代码? [复制]

JUnit单元测试基础要点

Junit单元测试