0

EclipseのCodeProはJUnitテストを生成Exceptionしますが、チェックされた例外をスローすることが不可能な場合でも、生成するすべてのテストメソッドはスローされます。これはCodeProの制限ですか、それとも私がこれまでに見たことのないJUnitの優れたプラクティスですか?

例えば:

@Test
public void testCategory_1()
    throws Exception {
    String categoryName = "";

    Category result = new Category(categoryName);

    // add additional test code here
    assertNotNull(result);
    assertEquals(null, result.getCategoryName());
}

new Category(String)チェックされた例外をスローしresult.getCategoryName()ない場所。

4

3 に答える 3

2

上記の場合、問題なくスロー例外を削除できます。ただし、チェックされた例外がある場合、スロー例外を追加するだけでコードの管理がはるかに簡単になります。代替案を見てください:

@Test public static void testIt() {
    try {
        foobar(); // throws an IOException
    } catch (Exception e) {
        fail("caught an exception " + e.getMessage());
    }
}

とは対照的に:

@Test public static void testIt() throws IOException {
    foobar();
}

JUnitは、アサーションの失敗(実際にはAssertionErrorとして実装されます)とまったく同じように例外を処理するため、コードに予期しない例外が発生すると、テストが失敗します。これはおそらくあなたが望むものです。そして、あなたのテストははるかに明確です

予期される例外がある場合は、@ TestアノテーションでexpectedExceptionとして指定するか、TestRule ExpectedExceptionを使用できます。

コードで例外をチェックしたときに、これをよく使用します。throws Exceptionチェックされたすべての例外のリストよりも、テストメソッドに追加する方がはるかに簡単です。ただし、いくつかのチェックスタイルルールに違反します:-)

いい練習?むしろ容認できる慣行。これにより、テストの保守がはるかに簡単になり、コードが少し明確になります。

于 2011-11-16T06:01:37.237 に答える
1

それは間違いなく制限ではありません。単体テストを作成するときは、どのような種類の例外がスローされるかはあまり気にしません。予想される例外以外では、例外が発生すると赤いバーが表示され、問題があることが示されます。throws Exceptionしたがって、"catch all"句があれば十分です。

于 2011-11-16T00:54:35.427 に答える
0

Exception をスローする必要はありません。チェック済みの例外がスローされた可能性があるかどうかを判断するために、そのツールが静的分析を実行できた可能性があることをイメージします。ただし、手動で単体テストを作成する場合は通常、throw 句を追加します。これは、常に、チェック済み例外をスローするコード行を追加するためです。

于 2011-11-15T23:51:32.120 に答える