2010-12-29 5 views
22

私はJUnitテストケースのためにGoogleで検索してきた、そしてそれが実装する多くのより複雑に見える何かを思い付く - あなたはあなたがして呼び出すテストケースを拡張する新しいクラスを作成する必要があります。NUnitのtestcase属性に相当するJUnitはありますか?

public class MathTest extends TestCase { 
    protected double fValue1; 
    protected double fValue2; 

    protected void setUp() { 
     fValue1= 2.0; 
     fValue2= 3.0; 
    } 
} 

public void testAdd() { 
    double result= fValue1 + fValue2; 
    assertTrue(result == 5.0); 
} 

NUnitのテストケースのような、本当にシンプルなものです。

[TestCase(1,2)] 
[TestCase(3,4)] 
public void testAdd(int fValue1, int fValue2) 
{ 
    double result= fValue1 + fValue2; 
    assertIsTrue(result == 5.0); 
} 

JUnitでこれを行う方法はありますか?

+2

JUnitは2つのスタイルがあります。あなたは本当にバージョン3について知りたいですか? – Raedwald

+0

ああ...いいえ...私は約4.5を知りたいです... – Steph

+1

私が探しているかもしれないと思うのは、パラメータ化されたテストです。しかし、これは少し冗長で少しランダムに見えます... http://www.mkyong.com/unittest/junit-4-tutorial-6-parameterized-test/ – Steph

答えて

2

これは愚かですが、ここに私が最後に持っている回避策があります。 1行ではなく4行を使用します。

@Test 
public void testAdd1() { 
    testAdd(1,2); 
} 
@Test 
public void testAdd2() { 
    testAdd(3,4); 
} 
private void testAdd(int fValue1, int fValue2) 
{ 
    double result= fValue1 + fValue2; 
    assertIsTrue(result == 5.0); 
} 
6

JUnit Theories and Datapointsをチェックアウトする価値があるかもしれません。 テストをパラメータ化できますが、入力にはすべてのペアのタイプの組み合わせを実行できます。

+0

これは要件に最も近い答えのようです。 –

10

正解は「いいえ、同等のものはありません」と思われます。それは悲しいことです。

JUnitのパラメータ化されたテストと理論(ここで述べたように、JUnit - How to test a method with different values?)はどちらも仕事を終わらせることができますが、どこでもきれいにはできません。彼らは悲しいかなか書いて、読みにくいです。

私は、ある日、JUnitがNUnitのような簡単な構文を追加できることを願っています。それほど難しいことではないようです。多分ラムダが必要でしょうか?

+0

ラムダはおそらく適切なジェネリック薬ほど必要ではないかもしれませんが、ここでの推測に過ぎません。注釈/属性は、匿名関数に全く依存しません。 – Joey

11

2017更新: JUnit 5には、junit-jupiter-params拡張によるパラメータ化されたテストが含まれます。 documentationからのいくつかの例:プリミティブ型の

単一のパラメータ(@ValueSource):

@ParameterizedTest 
@ValueSource(strings = { "Hello", "World" }) 
void testWithStringParameter(String argument) { 
    assertNotNull(argument); 
} 

カンマ区切り値(@CsvSource)以下JUnitParamsと同様の複数のパラメータを指定できます

@ParameterizedTest 
@CsvSource({ "foo, 1", "bar, 2", "'baz, qux', 3" }) 
void testWithCsvSource(String first, int second) { 
    assertNotNull(first); 
    assertNotEquals(0, second); 
} 

その他ソース注釈は、@EnumSource,@MethodSource,@ArgumentsSourceおよび@CsvFileSourceを含み、詳細はを参照してください。


オリジナルの答え:

JUnitParams(https://github.com/Pragmatists/JUnitParams)まともな選択肢のように思えます。それはあなたがこのように、文字列としてテストパラメータを指定することができます:

@RunWith(JUnitParamsRunner.class) 
public class MyTestSuite { 
    @Test 
    @Parameters({"1,2", "3,4"}) 
    public testAdd(int fValue1, int fValue2) { 
     ... 
    } 
} 

ます。また、詳細についてはJUnitParamsRunner api docsに相談し、別の方法で、クラスやファイルを介しパラメータを指定することができます。あなたはzohhak

使用例を使用してパラメータを持つのJUnitを持つことができます

5

:アノテーションを使用している、あなたはあなたの例を持っているバージョン3、およびバージョン4:

@RunWith(ZohhakRunner.class) 
public class HelloWorldTest { 

    @TestWith({ 
     "2, 1, 3", 
     "3, 5, 8" 
    }) 
    public void should_add_numbers(int addend1, int addend2, int result) { 

     assertThat(addend1 + addend2).isEqualTo(result); 
    } 
} 
+0

これは、JUnit 5の新しい「@ ValueSource」機能よりも優れています。 – urig

関連する問題