2011-11-11 20 views
1

私はAPIをテストするためのjnuitテストケースを書いています。次のようにjunitテストケースで問題が発生しました。コードの重複を避ける

私のクラスがある

class MyTest extends TestCase{ 
    List<String> argList; 
    public MyTest(){ 
    //read argList from File 
    } 



    testMyTest(){ 
     //callmy api 
     myApi(arg1); 
     } 

} 

今私は50 args.Argsのそれぞれに対して別々のテストケースを作りたいがファイルから読み込まれます。私は別のargs.Howと私myApiを呼び出すための別のメソッドを記述したいと思いますか? 私はしかし、それは良いのJUnitの練習ではありません、

testMyTest1(){ 
    //callmy api 
    myApi(arg1); 
    } 

testMyTest1(){ 
    //callmy api 
    myApi(arg2); 
    } 
+0

を使用してください。 whatsは引数型、myApi呼び出しからの出力、テストケースが合格したかどうかを確認する方法などです。 –

答えて

1
private static final String[] args = new String[] {.....}; 

@Test 
public void myTest(){ 
    for (int i=0; i<args.length; i++){ 
     myApi(args[i]; 
    } 
} 

上記の私が思うあなたの質問に答えるようsperate方法を書きたいいけません。各テストメソッドは、1つのテスト条件でテスト中のメソッドを1回だけ呼び出します。そうすれば、複数のものが間違っていると、一度に1つずつ処理するのではなく、別々のエラーが発生します。これは、次のことをお勧めします:

private static final String[] args = new String[] {.....}; 

private void testMyTest(String arg){ 
    myApi(arg); 
} 

@Test 
public void myTest0(){ 
    testMyTest(args[0]); 
} 
@Test 
public void myTest1(){ 
    testMyTest(args[1]); 
} 

はおそらく最良の仕組みは、上記の最初のオプションを実行しますが、複数のエラーが報告されるのを許可するErrorCollectorルールを使用することです。

私は修正されました。パラメータ化されたテストに関するjordaoの答えは、本当にこれを行うための最良の方法です。

2

これにはparameterized testを使用できます。

+0

ああ!間違いなくこれを行う正しい方法。 –

+0

テストの一部だけでパラメータ化されたテストを実行する方法はありますか?つまり、1つのテストセットを1回だけ実行し、別のセットを各パラメータに対して複数回実行する必要がありますか?または、これは一般的に複数のテストクラスを使用して行われていますか? –

+0

@JohnB:はい、複数のテストクラスがこれを解決します... –

0

ユニットテストは、通常、アサーションを使用して行われます。それぞれの引数にメソッドを書く必要はありませんが、引数に基づいて異なるアサーションを実行します。それを行うための

一つの方法は、次のようになります。

class MyApiTest extends TestCase { 
    List<String> argList; 

    public MyApiTest() {} 

    public testMyApi() { 
     assertTrue(testMyApi(arg1)); 
     assertFalse(testMyApi(arg2)); 
     assertNull(testMyApi(arg3)); 
     assertEquals(testMyApi(arg4), testMyApi(arg5)); 
    } 
} 

私も

class MyApiTest { 
    @Before 
    public setUp() {} 

    @After 
    public tearDOwn() {} 

    @Test 
    public testMyApi() { 
     Assert.assertTrue(testMyApi(arg1)); 
     Assert.assertFalse(testMyApi(arg2)); 
     Assert.assertNull(testMyApi(arg3)); 
     Assert.assertEquals(testMyApi(arg4), testMyApi(arg5)); 
    } 
} 
関連する問題