2011-11-15 7 views
0

EclipseのCodeProはJUnitテストを生成しますが、チェックされた例外がスローされない場合でも、生成するすべてのテストメソッドはExceptionをスローします。これはCodeProの制限ですか、これまでに見たことのない優れたJUnitの練習ですか?例えばCodeProのjunitテストメソッドが例外をスローする(Eclipseで)のはなぜですか?

new Category(String)result.getCategoryName()は、任意のチェック例外をスローしません

@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()); 
} 

+0

私はこの点で利点が見当たりません。 – mkro

答えて

2

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

@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を指定するか、TestRuleExpectedExceptionを使用して、予期される例外があるかどうかを指定できます。

私はコード内で例外をチェックしたときにこれを多く使用します。チェックされたすべての例外の一覧ではなく、throws Exceptionをテストメソッドに追加する方がはるかに簡単です。あなたはいくつかのcheckstyleルールに反しています:-)

良い練習ですか?むしろ容認できる習慣。テストのメンテナンスがずっと簡単になり、コードが少しはっきりします。

0

Exceptionをスローする必要はありません。そのツールが静的解析を実行して、チェックされた例外がスローされた可能性があるかどうかを判断できました。しかし、単体テストを手作業で書くときには、通常、チェックされた例外をスローするコード行を追加するため、スロー句を追加します。

1

間違いなくこの限りではありません。単体テストを書くときには、実際には例外であるがスローされます。 expected exceptionsの外にある場合、例外は何かがOKではないことを伝える赤いバーになります。したがって、「すべてをキャッチする」throws Exception句があれば十分です。

関連する問題