我寫了一個模擬的例子來說明這一點,而沒有暴露任何機密。這是一個「虛擬」的例子,它什麼都不做,但問題發生在測試初始化程序中。如何使用帶可變參數構造函數的JUnit參數化運行器?
@RunWith(Parameterized.class)
public class ExampleParamTest
{
int ordinal;
List<String> strings;
public ExampleParamTest(int ordinal, String... strings)
{
this.ordinal = ordinal;
if (strings.length == 0)
{
this.strings = null;
}
else
{
this.strings = Arrays.asList(strings);
}
}
@Parameters
public static Collection<Object[]> data() {
return Arrays.asList(new Object[][] {
{0, "hello", "goodbye"},
{1, "farewell"}
});
}
@Test
public void doTest() {
Assert.assertTrue(true);
}
}
基本上我有一個測試構造,其接受多個參數爲本地列表變量,我想通過陣列初始化劑填充此。測試方法將正確處理本地列表變量 - 我已經刪除了這個邏輯來簡化測試。
當我寫這篇文章時,我的IDE對語法沒有任何抱怨,並且測試類的構建沒有任何編譯錯誤。但是當我運行它時,我得到:
doTest[0]:
java.lang.IllegalArgumentException: wrong number of arguments
at java.lang.reflect.Constructor.newInstance(Unknown Source)
doTest[1]:
java.lang.IllegalArgumentException: argument type mismatch
at java.lang.reflect.Constructor.newInstance(Unknown Source)
這裏究竟出了什麼問題,以及如何正確使用此模式?
什麼是doTest,它保存着什麼數據? – Jes 2010-08-16 13:48:09
在這個例子中,doTest只是一個虛擬測試,允許這個測試套件在JUnit中執行。問題不在測試代碼中,因爲您會看到當您嘗試運行此測試時的情況;儘管它具有幾乎空的測試體,但由於上述初始化錯誤,它仍然無法運行。 – Kidburla 2010-08-16 13:50:21
我添加了一部分stacktrace,當我運行你的測試時,我清楚地看到當調用varargs構造函數時發生錯誤。如果這與您所看到的不同,請隨時更改或還原。 – 2010-08-16 13:53:42