-2

次のクラスがある場合:

public class MyTest
{
   @Test
   public void testSomething()
   {
     Something myData = new Something();
     testAccordingToData(myData);
   }


   @Test
   public void testSomethingElse()
   {
     Something myOtherData = new Something("something else");
     testAccordingToData(myOtherData);
   }

   private void testAccordingToData(Something someData)
   {
     assertTrue(somedata.someField);
     assertEquals(someData.someField, someData.someOtherField);
     //and various other assertions based on someData
   }
}

のアサーションはtestAccordingToData()通常どおり機能しますか?それとも、アサーションは で注釈が付けられたメソッドからのみ呼び出すことができ@Testますか?

4

3 に答える 3

3

これは Assert で最も複雑なチェーンです。アノテーションとは何の関係もなく、AssertionError をスローすることがわかります。これは、アサーションが失敗したときに行うことを考えると驚くことではありません。

static public void assertEquals(String message, Object expected,
                                Object actual) {
    if (equalsRegardingNull(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 equalsRegardingNull(Object expected, Object actual) {
    if (expected == null) {
        return actual == null;
    }

    return isEquals(expected, actual);
}

失敗時の呼び出し

static private void failNotEquals(String message, Object expected,
                                  Object actual) {
    fail(format(message, expected, actual));
}

呼び出す

static public void fail(String message) {
    if (message == null) {
        throw new AssertionError();
    }
    throw new AssertionError(message);
}
于 2013-10-14T01:45:31.893 に答える
1

カスタム アサーション メソッドを作成することは一般的ではありませんが、多くの場合賢明です。通常、メソッドに のような名前を付けますassertFoo

最近では、カスタム Hamcrest マッチャーを作成できます。

最後に、失敗したすべてのアサーションの結果を確認したいということについて上記でコメントしました。その場合、JUnit 4.8 以降には解決策があります。ErrorCollector を見てください@Rule

于 2013-10-14T01:38:23.627 に答える