为什么assertEquals(Object,Object)不使用junit ComparisonFailure?

Phi*_*ayo 9 java junit unit-testing

在Junit 4中,你看到在assertEquals(Object,Object)失败时抛出一个ComparisonFailure而不是一个缺点AssertionError吗?

assertEquals(Object,Object)抛出

  • a ComparisonFailure如果预期和实际都是String
  • 一个AssertionError如果任一不为String

AssertionError 消息已经是表单

"expected:<"+ expected.toString() +"> but was <"+ actual.toString()
Run Code Online (Sandbox Code Playgroud)

(通过String.valueOf,参见下面由Assert.assertEquals(Object,Object)调用的junit-4.8.2方法来构建AssertionError消息):

static String format(Object expected, Object actual) {
    ...
    String expectedString= String.valueOf(expected);
    String actualString=   String.valueOf(actual);
    ...
    return formatted+"expected:<"+ expectedString +"> but was:<"+ actualString +">";
Run Code Online (Sandbox Code Playgroud)

ComparisonFailure提供更加可读的方法来发现eclipse或Intellij IDEA对话框中的差异(FEST-Assert抛出此异常)

[更新:编辑的问题专注于ComparisonFailure/AssertionError讨论.]

Ken*_*eck 9

我们开始比较字符串,因为很明显如何使错误消息更有帮助.我们从未将ComparisonFailure扩展为一般对象,因为不清楚如何以一般方式这样做.正如其他人所建议的那样,如果您可以提供更好的错误消息或移动到Hamcrest,欢迎您添加特殊断言,Hamcrest提供了添加有用失败消息的一般机制.

问候,

肯特