JUnitの適切な使用(または少なくともドキュメント)は非常に混乱していることがわかりました。この質問は、将来の参照と実際の質問の両方として機能します。
私が正しく理解していれば、JUnitテストを作成して実行するには、主に2つの方法があります。
アプローチA(JUnit 3スタイル): TestCaseを拡張するクラスを作成し、単語でテストメソッドを開始しtest
ます。(Eclipseで)JUnitテストとしてクラスを実行すると、単語で始まるすべてのメソッドtest
が自動的に実行されます。
import junit.framework.TestCase;
public class DummyTestA extends TestCase {
public void testSum() {
int a = 5;
int b = 10;
int result = a + b;
assertEquals(15, result);
}
}
アプローチB(JUnit 4スタイル):「通常の」クラスを@Test
作成し、メソッドに注釈を付加します。メソッドを単語で始める必要はないことに注意してくださいtest
。
import org.junit.*;
import static org.junit.Assert.*;
public class DummyTestB {
@Test
public void Sum() {
int a = 5;
int b = 10;
int result = a + b;
assertEquals(15, result);
}
}
2つを混合することは良い考えではないようです。たとえば、次のstackoverflowの質問を参照してください。
今、私の質問:
- 推奨されるアプローチは何ですか?または、どちらを代わりに使用するのですか?
- アプローチBでは、のように@Testアノテーションを拡張することで、例外をテストできます
@Test(expected = ArithmeticException.class)
。しかし、アプローチAを使用する場合、例外をどのようにテストしますか? アプローチAを使用する場合、次のようにテストスイートにいくつかのテストクラスをグループ化できます。
TestSuite suite = new TestSuite("All tests");
suite.addTestSuite(DummyTestA.class);
suite.addTestSuite(DummyTestAbis.class);
ただし、これはアプローチBでは使用できません(各テストクラスはTestCaseをサブクラス化する必要があるため)。アプローチBのテストをグループ化する適切な方法は何ですか?
編集:私は両方のアプローチにJUnitバージョンを追加しました
extends TestCase
、各テストも@Test
混乱を招くためだけに注釈が付けられている。:)