2017-05-23 11 views
0

私は、Javaに慣れていない午前なく、C#の(NUnitの)には、次のよう[TestCase]属性を追加することにより、ユニットテストをパラメータ化することができますユニットテストをパラメータで書くには?

この場合
[TestCase(12,3,4)] 
[TestCase(12,2,6)] 
[TestCase(12,4,3)] 
public void DivideTest(int n, int d, int q) 
{ 
    Assert.AreEqual(q, n/d); 
} 

我々は、すべてのテストケースのための別々のユニットテストを記述する必要はありません。代わりに[TestCase]を記述して値を変更しています。

Javaに同等のものはありますか? 現在使用中Junit 4.12

+1

パラメータ化されたテスト(https://www.tutorialspoint.com/junit/junit_parameterized_test.htm)を見てください。コンストラクタに注意してください - メソッドが取ることができるargsの数を指定できます。 Javaではそれほど美味しくはない(とは言えないかもしれませんが)、これは一つの選択肢になり、異なるテストデータに対して同じテストケースを再利用することができます – rj2700

+0

@ robjob27、私はあなたが提供したリンクを見ました。しかし、それはnunitのように見栄えがよくありません。もっとエレガントに見えるようにすることはできますか?エレガントな意味では、nunitのように単純化されています。少なくとも、新しい属性を書き込んでJUnitスタイルに変換するオプションはありますか? –

+1

@AkinerAlkanええ、私は同意します。これらはかなり見えません。ちょっとしたこととして、C#の中で本当にクールなものは理論です。基本的には上記のテストケースのようですが、それをさらに抽象化します。 – rj2700

答えて

5

パラメータ化が必要です。以下の例を考えてみましょう。 20/5 = 4

import static org.junit.Assert.assertEquals; 

import java.util.Arrays; 
import java.util.Collection; 

import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.junit.runners.Parameterized; 

@RunWith(Parameterized.class) 
public class DividerTest { 

    private int dividend; 
    private int divisor; 
    private int expectedResult; 

    @Parameterized.Parameters 
    public static Collection<Object[]> data() { 
    Object[] test1 = { 10, 5, 2 }; 
    Object[] test2 = { 15, 5, 3 }; 
    Object[] test3 = { 20, 5, 5 }; 

    return Arrays.asList(test1, test2, test3); 
    } 

    public DividerTest(int dividend, int divisor, int expectedResult) { 
    this.dividend = dividend; 
    this.divisor = divisor; 
    this.expectedResult = expectedResult; 
    } 

    @Test 
    public void testDivider() { 
    assertEquals(expectedResult, dividend/divisor); 
    } 
} 

そして、ここでは、テスト結果があるように、そのtest3には明らかにREDであることに注意してください:

enter image description here

+0

これは良い例ですが、これはnunitと同じ論理ですがreprepantionは違うことを理解しています。私が疑問に思っているのは、何らかの汎用コードを書いて、nunitのようなコレクションの作成を単純化できるかどうかです。その場合、[TestCase(x、y、z)]のような全く同じ実装を持つことができます。 –

+1

今のところ、Junitは[TestCase(x、y、z)]をサポートしていません。だからまだ答えはありません:) – nxhoaf

+0

しかし、JUnit5にはより良いパラメータ化されたサポートがあります。おそらくエレガントではないが、その近く。 @CsvSourceをチェックしてください: http://junit.org/junit5/docs/current/user-guide/#writing-tests-parameterized-tests – Kotse

0

TestNGのは、データを使用してテストパラメータを超える優れた制御とライブラリとフレームワークです工場と依存症注射。

関連する問題