JUnit - 使用错误的断言

zfr*_*cus 1 junit unit-testing

我从exubero的条目中引用这篇文章.我认为这个条目将使每个正在进行单元测试的人受益:

从Junit的Assert类中定义的assert开始,有许多不同的方法.这些方法中的每一种都有关于它们断言的含义略有不同的参数和语义.

以下显示了assertTrue的一些不规则用法:

assertTrue("Objects must be the same", expected == actual);
assertTrue("Objects must be equal", expected.equals(actual));
assertTrue("Object must be null", actual == null);
assertTrue("Object must not be null", actual != null);
Run Code Online (Sandbox Code Playgroud)

一些单元测试专家指出,上面的代码可以更好地编写为:

assertSame("Objects must be the same", expected, actual);
assertEquals("Objects must be equal", expected, actual);
assertNull("Object must be null", actual);
assertNotNull("Object must not be null", actual);
Run Code Online (Sandbox Code Playgroud)

使用适当的'assertXXX()'的一个优点是可以提高单元测试的可读性.任何人都可以指出使用适当的'assertXXX()'还有什么好处?

Vad*_*dim 8

我不是Java开发人员,我不知道断言失败时JUnit会输出什么.我使用的许多单元测试框架在使用assertEquals之类的东西时会输出更好的错误信息.

让我告诉你一个我正在谈论的例子:

assertTrue("Objects must be equal", "One" == "Two");
assertEquals("Objects must be equal", "One", "Two");
Run Code Online (Sandbox Code Playgroud)

在第一种情况下,您可以像这样输出错误:

错误:预期的真实实际是假的.

第二种情况的输出:

错误:执行"一个"实际是"两个".

如您所见,第二种情况提供了更有意义的信息.