0

テストの 1 つに次のコードがあります。2 番目のアサーションは失敗します。

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

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

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

4

2 に答える 2

2

あなたのコードを新しいテストに貼り付けたところ、あなたが述べたように失敗しました。ただし、最後の「a b」文字列を削除して再入力すると、合格しました。このページのソースを表示したときに表示されない文字が埋め込まれている必要があります。

失敗したアサーションは、期待値が

"a[ ]b"
于 2012-04-21T00:19:09.457 に答える
0

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); 
于 2012-04-21T00:17:33.263 に答える