我的一项测试中有以下代码。第二个断言失败。
String decode1 = URLDecoder.decode("a%20b", "UTF-8");
assertTrue("a b".equals(decode1)); // pass
assertEquals("a b", decode1); // FAIL
我不知道为什么。这是 JUnit 的错误吗?如果第一个参数不为空,您会认为 JUnit 只会调用 .equals() ......
当我将您的代码粘贴到新测试中时,如您所说,它失败了。但是,在删除最后的“a b”字符串并重新输入后,它通过了。您必须在其中包含一些我在查看此页面的源代码时看不到的嵌入字符。
失败的断言通过说期望值为
"a[ ]b"
它确实调用了equals()。查看来自 kickjava 的源代码,我们有以下内容。(您没有说您使用的是 JUnit 3.8 还是 4.0,但我很确定他们没有更改这种基本功能的实现。
public static void assertEquals(String msg, Object obj1, Object obj2) {
if (obj1 == null && obj2 == null) {
return;
}
if (obj1 != null && obj1.equals(obj2)) {
return;
}
fail(msg + " expected=" + obj1 + " actual=" + obj2);
}
您是否 100% 确定杂散编码字符没有潜入您的测试。也许试试这个来排除它?
String expected = "a b";
assertTrue(expected.equals(decode1));
assertEquals(expected, decode1);