2012-01-31 128 views
2

我有一個類,其中一個公共方法非常適合參數化測試。另外,我在閱讀您通常在測試用例(具有帶@Test註釋方法的多個方法的類)和項目中的類之間保持對應關係。是否有可能使用Parameterized.class和JUnitCore.class作爲跑步者?現在,如果使用參數化I無法解決如何在同一個測試用例中設置方法 的非參數化測試。我曾考慮過創建一個套件,然後包含 參數化測試和「常規」測試,但是似乎爲了使測試用例的名稱有意義,我必須將測試用例的名稱綁定到方法的名稱而不是包含似乎是標準方法的方法。使用JUnit參數化測試

例如

public class MyClass { 

    public int methodSuitableForParameterizedTest(int m){ 
     // Implementation 
    } 

    public int methodForRegularTest(int m) { 
     // Implmentation 
    } 
} 

我還可以有一個單一的測試用例TestMyclass包含第一方法的paremeterized測試以及該第二非參數化測試?

+0

請記住,使用參數化測試時,無論是構造,也陣列方法的集合/列表都通過反射調用,因而不會從測試套件被稱爲類。 Reflection允許單元測試類通過使用靜態收集方法構建測試用例來調用它自己的構造函數。 – djangofan 2012-02-22 22:28:58

回答

2

這很難做到,它涉及到創建你自己的跑步者這兩個工作,所以我只是堅持兩個類的解決方案,一個參數化測試和一個沒有。

問題有兩方面,一是類和構造函數的註解。對於參數化測試,您需要@RunWith(Parameterized.class)和一個帶參數的構造函數。對於標準測試,構造函數沒有參數。而JUnit檢查一個特定的類只有一個構造函數。你可以通過創建另一個跑步者來做到這一點,但這並不簡單。

我會建議在這種情況下有兩個測試類。

+0

感謝您的建議。只是惱人的不能保持每個類結構的一個測試用例。 – 2012-01-31 15:09:00

+1

對於TestNG的數據提供者來說,這是微不足道的,它允許你在一個類中擁有儘可能多的參數化測試方法和數據提供者,但是它也將這些參數直接傳遞給你的測試方法。 http://testng.org – 2012-01-31 18:00:01

+0

謝謝塞德里克。這可能是我在TestNG上最後一次點頭,因爲我相信自己應該從JUnit開始。 – 2012-02-02 09:35:53

1

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

@TestWith({ 
    "25 USD", 
    "38 GBP", 
    "null" 
}) 
public void testMethod(Money money) { 
    ... 
} 
+0

我喜歡zohhak,但寧願使用Spock。甚至更簡單。 – 2014-07-22 23:17:45