2009-04-15 162 views
64

在繼續進行下一個測試用例之前,有沒有什麼方法可以告訴JUnit多次使用不同的數據運行特定的測試用例?使用不同的數據多次運行相同的JUnit測試用例

+4

通過使用理論(正如@dfa指出的那樣),Junit會將所有測試視爲一項測試,並且會使得更難確定哪項測試失敗。 雖然參數化測試(如@ jjnguy指出的)將它們全部視爲不同的測試,清楚地表明哪個測試失敗。 – mindreader 2014-05-02 18:12:32

回答

63

看看到junit 4.4 theories

import org.junit.Test; 
import org.junit.experimental.theories.*; 
import org.junit.runner.RunWith; 

@RunWith(Theories.class) 
public class PrimeTest { 

    @Theory 
    public void isPrime(int candidate) { 
      // called with candidate=1, candidate=2, etc etc 
    } 

    public static @DataPoints int[] candidates = {1, 2, 3, 4, 5}; 
} 
+0

我有幾個測試用例遵循像testxyz(),testpqr()這樣的格式。現有的測試類擴展了TestCase。 – Giridhar 2009-04-15 17:58:35

+0

如果我正在使用這種格式,則沒有運行。 – Giridhar 2009-04-15 17:59:29

2

我總是做一個幫助器方法,根據參數執行測試,然後從JUnit測試方法調用該方法。通常這意味着單個JUnit測試方法實際上會執行大量測試,但這對我來說不是問題。如果你想要多個測試方法,每個獨立調用一個,我建議生成測試類。

3

這裏是一個後我寫的說明與示例代碼重複運行測試的幾種方法:

Run a JUnit test repeatedly

您可以使用@Parametrized跑步者,或者使用後期包含的特別跑步者

9

最近我開始zohhak項目。它可以讓你寫:

@TestWith({ 
    "25 USD, 7", 
    "38 GBP, 2", 
    "null, 0" 
}) 
public void testMethod(Money money, int anotherParameter) { 
    ... 
} 
1

如果你不想或者不能使用定製的運行(例如,你已經在使用的其他選手一樣,Robolectric亞軍),你可以試試這個DataSet Rule

3

一個更好的方法(可以讓你有一個以上的測試方法)是使用JUnit與JUnitParams:

import junitparams.Parameters; 
import org.junit.Test; 

@RunWith(JUnitParamsRunner.class) 
Public class TestClass() { 

    @Test 
    @Parameters(method = "generateTestData") 
    public void test1(int value, String text, MyObject myObject) { 
     ... Test Code ... 
    } 

    .... Other @Test methods .... 

    Object[] generateTestData() { 
     MyObject objectA1 = new MyObject(); 
     MyObject objectA2 = new MyObject(); 
     MyObject objectA3 = new MyObject(); 

     return $(
      $(400, "First test text.", objectA1), 
      $(402, "Second test text.", objectA2), 
      $(403, "Third test text.", objectA3) 
     ); 
    } 
} 

你可以得到jun​​itparams項目here

1

如果您已經在測試課堂中使用了@RunWith,那麼您可能需要查看this

相關問題