88

私はJavaに本当に慣れていません。

コンストラクターでいくつかのJUnitテストを実行しています。コンストラクターは、パラメーターの1つにnullまたは空の文字列が与えられた場合、例外をスローすることになっているようなものです。

nullまたは空の文字列パラメーターを使用してJUnitでこのコンストラクターをテストすると、そのようなパラメーターが渡されたときにコンストラクターメソッドが実際に例外をスローすることはほぼ100%確信していますが、赤いバーが表示されます。

メソッドが想定どおりに例外をスローした場合、JUnitに緑色のバーがあるべきではありませんか?それとも、例外スローが想定どおりに機能するときに赤いバーが表示されることになっている場合ですか?

4

5 に答える 5

130
@Test(expected = Exception.class)  

例外が予期された結果であるため、例外がスローされたときにテストに合格(緑色でマーク)されることをJunitに通知します。

にとって

@Test

例外がスローされた場合、チェックされていない例外であれば、JUnitはテストが失敗したと見なします。例外がチェックされている場合、それはコンパイルされず、他のメソッドを使用する必要があります。このリンクが役立つ場合があります。

于 2013-03-05T05:27:15.400 に答える
46

例外を予期するように言ってもよろしいですか?

新しいjunit(> = 4.7)の場合、(ここから)のようなものを使用できます

@Rule
public ExpectedException exception = ExpectedException.none();

@Test
public void testRodneCisloRok(){
    exception.expect(IllegalArgumentException.class);
    exception.expectMessage("error1");
    new RodneCislo("891415",dopocitej("891415"));
}

古いjunitの場合、これは次のとおりです。

@Test(expected = ArithmeticException.class)  
public void divisionWithException() {  
  int i = 1/0;
}
于 2013-03-05T05:28:43.337 に答える
6

コンストラクターが次のような場合:

public Example(String example) {
    if (example == null) {
        throw new NullPointerException();
    }
    //do fun things with valid example here
}

次に、この JUnit テストを実行すると、緑色のバーが表示されます。

@Test(expected = NullPointerException.class)
public void constructorShouldThrowNullPointerException() {
    Example example = new Example(null);
}
于 2013-03-05T05:34:49.437 に答える
6

ExpectedException ルール (バージョン 4.7) を使用する利点は、予期される例外だけでなく、例外メッセージをテストできることです。

また、Matchers を使用して、関心のあるメッセージの部分をテストできます。

exception.expectMessage(containsString("income: -1000.0"));
于 2014-05-20T19:35:07.107 に答える