Junit + UrlDecoder:为什么这个测试失败了?

时间:2012-04-21 00:05:15

标签: java junit urldecode

我的一个测试中有以下代码。第二个断言失败了。

String decode1 = URLDecoder.decode("a%20b", "UTF-8");

assertTrue("a b".equals(decode1)); // pass
assertEquals("a‌ b", decode1); // FAIL

我无法弄清楚原因。这是JUnit的错误吗?如果第一个arg不为null,你会认为JUnit只会调用.equals()...

2 个答案:

答案 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);