-1

単体テストしたいこの簡単なメソッドがあるとしましょう:

public class Add {
    public static int addTheFollowingPositiveNumberToOne(int a) {
        if(a <= 0) {
            throw new IllegalArgumentException();
        }
        int b = 1 + a;
        return b;
    }
}

パラメータが 0 以下の場合に IllegalArgumentException がスローされるようにしたいと考えています。

JUnit コードは次のようになります。

@Test (expected = IllegalArgumentException.class)
public void testIllegalArgumentException() {
    int a = -1;
    Add.addTheFollowingPositiveNumberToOne(a);
}

最後に .class を追加する必要があるのはなぜですか?

4

3 に答える 3

3

実際には、メソッドに不正または不適切な引数が渡されたことを示すためにスローされるIllegalArgumentExceptionクラスです。これは、実際には を拡張する Java のクラスです。これが継承階層です。RuntimeException

java.lang.Object
--java.lang.Throwable
   --java.lang.Exception
      --java.lang.RuntimeException
        --java.lang.IllegalArgumentException

を指定する必要がある理由について@Test (expected = IllegalArgumentException.class)、簡単に説明します。

@Test注釈は、2 つのオプション パラメータをサポートします最初の期待されたものは、テスト メソッドが例外をスローする必要があることを宣言します例外がスローされない場合、または宣言されたものとは異なる例外がスローされる場合、テストは失敗します。たとえば、次のテストは成功します。

@Test(expected=IndexOutOfBoundsException.class) public void outOfBounds() {
       new ArrayList<Object>().get(1);
    }

2 番目のオプション パラメータである timeout は、指定されたクロック時間 (ミリ秒単位で測定) よりも長い時間がかかる場合にテストを失敗させます。次のテストは失敗します。

@Test(timeout=100) public void infinity() {
   while(true);
}

参照チェック用:

それが役に立てば幸い。:)

于 2013-10-07T05:34:32.303 に答える
2

.classクラス名の後に書くと、そのクラスを表すClassオブジェクトを参照します。

また、もう1つ注意すべき重要なことは、

ClassName.classそのクラスのインスタンスが利用できない場合に使用します。そしてclassObject.getClass()、クラスのインスタンスが利用可能なときに使用します。

注釈のドキュメントを見ると、expected()@Test

public abstract java.lang.Class が必要です

必要に応じて、指定されたクラスの例外がメソッドによってスローされた場合にテスト メソッドを成功させるには、Throwable である expected を指定します。

expectedタイプのパラメータclass( を拡張しますThrowable)を取るため、 ..classの後に指定しIllegalArgumentExceptionます。

IllegalArgumentException- throwable を拡張.class- 期待されるクラス オブジェクトを提供します。

于 2013-10-07T05:29:42.440 に答える