2017-03-06 12 views
1

私のメソッドのJUnitテストを記述しました。
これは私の方法である:JUnitでのExceptingが動作しない

public static int delimit(int value, int min, int max) throws IllegalArgumentException { 
     if (min > max) 
     throw new IllegalArgumentException("Min value was greater than max value."); 

     return Math.min(max, Math.max(min, value)); 
    } 

これはテストです:

public class DMathTest extends TestCase { 
    @Rule 
    public ExpectedException exception = ExpectedException.none(); 

    @Test 
    public void testDelimit() { 
     ... 

     exception.expect(IllegalArgumentException.class); 
     DMath.delimit(1, 3, 2); 
    } 

} 

IllegalArgumentExceptionは確かに投げたが、JUnitは、テスト中にエラーとしてマークしています。それは、(予想される)例外のためにテストが失敗したことを私に伝えます。 AssertionErrorも何もありません。あたかも期待通りのコードがなかったかのように、ただIllegalArgumentExceptionと表示されます。 その後、ルールとすべての期待値コードを削除しましたが、まったく同じ結果になりました(もちろん、これはどのようにするべきかです)。だからルールとコール

exception.expect(IllegalArgumentException.class); 

何もしていない。
私はEclipseを使用しています.Mavenを使用してJUnitを組み込みました。依存関係要素は次のようになります。

<dependency> 
    <groupId>junit</groupId> 
    <artifactId>junit</artifactId> 
    <version>4.12</version> 
    <scope>test</scope> 
</dependency> 

どうしましたか?なぜ例外が予想されないのですか?

答えて

3
public class DMathTest extends TestCase { 
         ^^^^^^^^^^^^^^^^ 

これはエラーである可能性があります。 TestCaseはJUnit 3.x APIです。 JUnit 4.xテストはもはやそのクラスを拡張することはなく、おそらくそれを拡張することによってセマンティクスが変化します。 extend句を削除してからもう一度やり直してください。さもなければ、あなたのコードは正しく見えます。

また、JUnit 4.xでは、 "testXyz"命名規則を使用する必要がなくなりました。メソッド名は、メソッドがpublicであり、@Testと注釈されている限り、何でもかまいません。私は通常、メソッド名 "should"を使用します。 "delimit ShouldFailIfMinGtMax"。これにより、より読みやすいテストレポートが作成されます。

+0

はい、間違いでした。 'TestCase'を拡張しなければ、うまく動作します。どうもありがとうございました! – David

関連する問題