我的一个测试中有以下代码。第二个断言失败了。
String decode1 = URLDecoder.decode("a%20b", "UTF-8");
assertTrue("a b".equals(decode1)); // pass
assertEquals("a b", decode1); // FAIL
我无法弄清楚原因。这是JUnit的错误吗?如果第一个arg不为null,你会认为JUnit只会调用.equals()...
答案 0 :(得分:2)
当我将代码粘贴到新测试中时,它会失败,如您所述。但是,在删除最后的“a b”字符串并重新输入后,它就通过了。在查看此页面的来源时,您必须拥有一些我看不到的嵌入字符。
失败的断言通过说预期值
来表明这一点"a[ ]b"
答案 1 :(得分:0)
它会调用equals()。查看source code from 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);