从.txt文件运行整个数据集的JUnit(JAVA)测试

时间:2016-06-09 12:06:38

标签: java testing junit

JUnit对我来说是新的,我正在测试我的应用程序如下:

@Before
code...

@After
code...

@Test
test for data1

@Test
test for data2...

@Test
test for dataN

但是当我为不同的参数测试相同的方法时,我不希望我的测试需要几百行。我想做这样的事情,但我希望得到每个测试的结果

@Test
public final void testAll(){

    String data = load from file
    String bool = load from file
    boolean expectedResult;
    if(bool.equals("T")
        expectedResult = true;
    else
        expectedResult = false;
    assertEquals(expectedResult, testedMethod(data);
}

testAll()内为所有数据提供某种循环。

2 个答案:

答案 0 :(得分:5)

您需要的是Parameterized测试。 例如(来自维基)这个:

@RunWith(Parameterized.class)
public class FibonacciTest {
    @Parameters
    public static Collection<Object[]> data() {
        return Arrays.asList(new Object[][] {     
                 { 0, 0 }, { 1, 1 }, { 2, 1 }, { 3, 2 }, { 4, 3 }, { 5, 5 }, { 6, 8 }  
           });
    }

    private int fInput;

    private int fExpected;

    public FibonacciTest(int input, int expected) {
        fInput= input;
        fExpected= expected;
    }

    @Test
    public void test() {
        assertEquals(fExpected, Fibonacci.compute(fInput));
    }
}

是一个人的样子。

您可能还想查看更有用的TestNG's Data Providers

答案 1 :(得分:-1)

不是使用JUnit的@Before / @After注释,而是可以使用循环并在循环中运行每个测试用例,自己运行before和after方法。

E.g

for (int i = 0; i < 10; i++) {
    String data = loadData(i);
    boolean expected = loadResult(i);
    myBefore();
    try {
        assertTrue(expected, testedMethod(data));
    } finally {
        myAfter();
    }
}