26

私は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でこれを行う方法はありますか?

4

6 に答える 6

13

2017 更新: JUnit 5 には、junit-jupiter-params拡張機能によるパラメーター化されたテストが含まれます。ドキュメントからのいくつかの例:

プリミティブ型の単一パラメーター ( @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 ドキュメントを参照してください。

于 2013-07-10T18:24:08.167 に答える
11

どうやら正解は「いいえ、同等のものはありません」です。そしてそれは悲しいことです。

JUnit のパラメーター化されたテストと理論 (こことJUnit - How to test a method with different values?で言及されているように) はどちらも仕事を成し遂げることができますが、それほどきれいにはできません。それらは悲しいことに書くのが複雑で、読むのが難しいです。

いつの日か、JUnit がより簡単な NU​​nit のような構文を追加できるようになることを願っています。それほど難しいことではないようです。おそらくラムダが必要ですか?

于 2013-04-08T19:42:08.873 に答える
6

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

于 2012-09-09T07:03:01.767 に答える
5

zohhakを使用してパラメーター付きの junit を使用できます

使用例:

@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);
    }
}
于 2014-08-02T20:55:56.087 に答える
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);
}
于 2012-06-03T21:43:30.447 に答える