1

assertEquals(s1,s2); を使用して 2 つの文字列を比較しようとしています。私は比較エラーを取得しています<> nullが期待されています。これで私を助けてください。

4

2 に答える 2

5

(使用している JUnit のバージョンはわかりませんが、問題になる可能性がありますが、おそらくそうではありません。)

これは、単体テストに anの引数nullとして評価される式があり、引数が に評価されないことを意味します。expectedassertEqualsactualnull

コードを見ずにこれが実際に何を意味するのかを言うことはできませんが、単体テストのバグ (たとえば、間違った方法での引数) またはテスト中のコードのバグのいずれかである可能性があります ... またはその両方. を取得している理由についてnullは、単体テストおよび/またはテストしているコードによって異なります。ソース コードを調べたり、デバッガを使用したりして、独自の調査を行う必要があります。

このassertEqualsメソッド (以下を参照) はequals(not ==) を使用してオブジェクトを比較し、引数のいずれかまたは両方が である NPE をスローしないように注意することに注意してくださいnull。したがって、最初にテストすることを提案している人々nullは要点を見逃しています.

Junit 4.4 コードは次のとおりです。

static public void assertEquals(String message, Object expected, Object actual) {
    if (expected == null && actual == null)
        return;
    if (expected != null && isEquals(expected, actual))
        return;
    else if (expected instanceof String && actual instanceof String) {
        String cleanMessage= message == null ? "" : message;
        throw new ComparisonFailure(cleanMessage, (String)expected, 
                                    (String)actual);
    }
    else
        failNotEquals(message, expected, actual);
    }
}

private static boolean isEquals(Object expected, Object actual) {
    return expected.equals(actual);
}

ご覧のとおり、nullケースは処理されます...

于 2013-05-26T00:51:10.543 に答える
0

JUnit は .equals() メソッドを呼び出して、メソッド assertEquals(Object o1, Object o2) で等しいかどうかを判断します。したがって、assertEquals(string1, string2) を使用することは間違いなく安全です。(文字列はオブジェクトであるため) 両方のオブジェクトが null でない場合。それを評価する別の方法は、assertTrue を使用することです。

assertTrue(s1.equals(s2));
于 2013-05-26T00:32:30.037 に答える