2012-04-21 12 views
0

私のテストで次のコードを書いています。 2番目のアサーションは失敗します。Junit + UrlDecoder:なぜこのテストは失敗しますか?

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

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

私は理由を理解できません。これはJUnitのバグですか?最初の引数がnullでない場合、JUnitは.equals()を呼び出すと思うでしょう...

+1

であると言って、ややこれを示しています。 – Perception

答えて

2

私は新しいテストにあなたのコードを貼り付けたとき、あなたが述べたように、それが失敗した。しかし、最終的に 『AB』の文字列を削除し、再入力した後、それは通過しました。このページのソースを見るときに見えない埋め込み文字がいくつかある必要があります。

失敗したアサーションは、2番目の「B」の文字列内の非印字文字があり、期待値が

"a[ ]b" 
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%確か浮遊エンコードされた文字のdidnです「Tは多分それを除外するために、これを試してみてください。あなたのテストに潜入?

String expected = "a b"; 
assertTrue(expected.equals(decode1)); 
assertEquals(expected, decode1); 
関連する問題