什么是比较失败,JUnit中预期为null?

Ane*_*esh 1 java junit

我正在尝试使用assertEquals(s1,s2)比较两个字符串; 我得到比较错误<> null.帮助我解决这个问题.?

Ste*_*n C 5

(你没有说你正在使用什么版本的JUnit,它可能很重要......虽然可能不是.)

这意味着单元测试有一个表达式,其计算结果nullexpectedan assertEqualsactual参数,而参数不计算null.

如果不查看代码,就不可能说明这意味着什么,但它可能是单元测试中的错误(例如,错误方式的参数)或者被测试代码中的错误......或者两者兼而有之.至于为什么你得到一个null,这取决于单元测试和/或它正在测试的代码.您需要通过查看源代码,使用调试器等进行自己的调查.

请注意,该assertEquals方法(见下文)使用equals(not )比较对象==,并注意避免将NPE抛出或者两者都抛出null.所以建议你先测试的人null都忽视了这一点.

这是Junit 4.4代码:

static public void assertEquals(String message, Object expected, Object actual) {
    if (expected == null && actual == null)
        return;
    if (expected != null && isEquals(expected, actual))
        return;
    else if (expected instanceof String && actual instanceof String) {
        String cleanMessage= message == null ? "" : message;
        throw new ComparisonFailure(cleanMessage, (String)expected, 
                                    (String)actual);
    }
    else
        failNotEquals(message, expected, actual);
    }
}

private static boolean isEquals(Object expected, Object actual) {
    return expected.equals(actual);
}
Run Code Online (Sandbox Code Playgroud)

如您所见,null案件处理......