2016-06-09 20 views
2

JUnit的一個整個數據集是新的東西,我和我測試我的應用程序如下:運行JUnit(JAVA)的測試從.txt文件

@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()所有數據。

+0

通過可以簡化的方式:'assertTrue(bool.equals( 「T」),testedMethod(數據));' –

+0

我會建議你[連拍](HTTPS:/ /corner.squareup.com/2014/10/burst-parameterized-tests.html)。它非常適合您的需求,並且比JUnit4恕我直言的[參數化測試](https://github.com/junit-team/junit4/wiki/Parameterized-tests)更簡單易用。 – kazbeel

+0

你也可以看看[Concordion](http://concordion.org),它使這種事情變得簡單。 –

回答

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

而不是使用JUnit的@Before/@After註釋,您可以使用循環並運行循環內的每個測試用例,自己運行之前和之後的方法。

例如

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