使用数组和常量值迭代JUnit测试用例

时间:2015-01-21 17:50:57

标签: java junit

我想创建一个JUnit测试用例,为数组的每次迭代创建一个案例。我该怎么做呢?我已经看过一些关于@Parameterized.Parameters的文档,但似乎我需要将原始数组重建为{{array[0], constantValue}, {array[1], constantValue}}。有什么方法可以让JUnit做到以下几点:

public class Testing {

String[] array;
String constantValue;

@Test
public void test_arrayValue0() {
   assertEquals(array[0] + " is true", true, method(array[0], constantValue));
}

@Test
public void test_arrayValue1() {
   assertEquals(array[1] + "is true", true, method(array[1], constantValue));
}


@Test
public void test_arrayValue2() {
   assertEquals(array[2] + " is true", true, method(array[2], constantValue));
}
//..until array is complete
}

1 个答案:

答案 0 :(得分:3)

您需要使用数组值(以及可选的索引)来参数化测试:

@RunWith(Parameterized.class)
public class Testing {
    private final static String constantValue = "myConstant";

    @Parameters
    public static Object[][] params() { 
         return new Object[][]{ 
                new Object[] { "item0", 0 },
                new Object[] { "item1", 1 },
                //...
         };
    }

    @Param(0)
    public String arrayValue;

    @Param(1)
    public int arrayIndex;

    @Test
    public void test_arrayValue() {
        assertEquals("array" + arrayIndex + " is true", true, method(arrayValue, constantValue));
    }
}

然后你的test_arrayValue将被调用多次,就像你提供的参数一样,每次都有你指定的下一对索引和值。

或者,您可以将数组定义为一个字段:

private final String[] array = new String[] {"item0", "item1", ... }

然后使用索引参数化您的测试。