1

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

4

2 回答 2

5

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

这意味着单元测试有一个表达式,其计算结果null为 a 的expected参数assertEquals,而该actual参数不计算为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);
}

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

于 2013-05-26T00:51:10.543 回答
0

JUnit 调用 .equals() 方法来确定方法 assertEquals(Object o1, Object o2) 中的相等性。因此,使用 assertEquals(string1, string2) 绝对是安全的。(因为字符串是对象)提供的两个对象都是非空的。另一种评估它的方法是使用 assertTrue:

assertTrue(s1.equals(s2));
于 2013-05-26T00:32:30.037 回答