わかりました、さらに掘り下げたところ、これは特定のアプリケーション サーバーに関連していないことがわかりました。任意のアプリ サーバーで再現できます。
以下に示すように、サンプル (junit4) テスト ケースを作成するだけです。
@Test
public void stringTest() {
org.junit.Assert.assertEquals("Comparing 2 string:", "abc", "xyz");
}
次に、Eclipse から実行します。結果は 1 回の失敗として表示されます。Ant(またはMaven)ターゲットを使用して、アプリサーバー経由で同じことを実行すると、結果がエラーとして返されます。
ログを調べた後、これは junit4 org.junit.Assert.assertEquals(String message, Object expected,Object actual) メソッドがAssertionErrorの代わりにComparisonFailureをスローするためだと思います。これに関する私の分析は、junit4 assert() メソッド (org.junit.Assert.assertEquals(String, Object, Object)) が String インスタンスに対してのみ ComparisonFailure をスローすることです。以下は、org.junit.Assert.assertEquals ( junit4 assert メソッド)のコードです。
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);
}
そして、これは junit.framework.Assert.assertEquals(String, Object, Object) (つまり、junit3 assert メソッド)のコードです。
static public void assertEquals(String message, Object expected, Object actual) {
if (expected == null && actual == null)
return;
if (expected != null && expected.equals(actual))
return;
failNotEquals(message, expected, actual);
}
junit4 assertEquals() では、2 つの等しくない文字列に対してComparisonFailureをスローする、等しくない String インスタンスに対して追加のチェックが追加されていることがわかります。他のすべての等しくないオブジェクト、つまり Integer、Long など。呼び出しは、 AssertionErrorをスローするfailNotEquals()メソッドに行きます。
junit4 の org.junit.Assert.assertEquals() メソッドに String インスタンス チェックを追加することの設計上の重要性を理解するのを手伝ってくれる人はいますか。なぜ本当に追加され、なぜ文字列のみに追加されるのですか?