我想從文件中讀取數據並使用數據來測試特效。即使是要測試的過程也是從文件的內容中確定的。Junit與@Parameters來測試文件中的數據
Sample.txt的是從中我讀出的數據的文件,該文件包含以下數據
testproc=sample_check('N')
output=yes
type=function
testproc=sample_check('N')
output=yes
type=function
testproc=sample_check('N')
output=yes
type=function
以下程序試圖讀取文件並填充它的內容到一個2維字符串數組。
@RunWith(value = Parameterized.class)
public class Testdata extends Testdb {
public String expected;
public String actual;
@Parameters
public static Collection<String[]> getTestParameters() {
String param[][] = new String [3][3];
String temp[] = new String [3];
int i = 0;
int j = 0;
try{
BufferedReader br = new BufferedReader(new FileReader("sample.txt"));
String strLine;
String methodkey = "testproc";
String methodtypekey = "type";
String methodoutputkey = "output";
String method = "";
String methodtype = "";
String methodoutput = "";
//Read File Line By Line
while ((strLine = br.readLine()) != null)
{
StringTokenizer st = new StringTokenizer(strLine, "=");
while(st.hasMoreTokens())
{
String key = st.nextToken();
String val = st.nextToken();
if (key.trim().equalsIgnoreCase(methodkey))
{
method = val.trim();
temp[j] = "SELECT " + method + " FROM dual";
j++;
}
else if (key.trim().equalsIgnoreCase(methodoutputkey))
{
methodoutput = val.trim();
temp[j] = methodoutput;
j++;
}
else if (key.trim().equalsIgnoreCase(methodtypekey))
{
methodtype = val.trim();
if (methodtype.trim().equalsIgnoreCase("function"))
{
System.out.println(i + " " + method);
param[i] = temp;
i++;
j = 0;
}
}
}
}
}
catch (Exception e){//Catch exception if any
System.err.println("Error: " + e.getMessage());
}
return Arrays.asList(param) ;
}
public Testdata(String[] par) {
this.expected = par[0];
this.actual = par[1];
}
@Test
public void test_file_data() //throws java.io.IOException
{
testString("Output should be"+expected , expected, actual);
}
}
我收到一個錯誤 java.lang.IllegalArgumentException異常:參數錯號
的TestString是連接到數據庫,檢查的方法,如果實際值吻合與預期的結果。這需要兩個字符串值作爲參數。
我的問題是應該如何 回報Arrays.asList(PARAM) 和方法 公共TESTDATA(字符串[] PAR) 樣子?
我測試使用這一點,它工作正常,但因爲我從文件中讀取,我想用這需要用回Arrays.asList
return Arrays.asList(new String[][]{
{ "yes", "SELECT sample_check('N') FROM dual"},
{ "yes", "SELECT sample_check('N') FROM dual"},
{ "yes", "SELECT sample_check('N') FROM dual"}
}) ;
}
public Testdata(String expected,
String actual) {
this.expected = expected;
this.actual = actual;
}
在得到這個工作有什麼建議返回一個數組?
其中java.lang.IllegalArgumentException被拋出? –
另外,我認爲使用像ArrayList這樣的Collection會更容易,而不是使用param和temp數組。我懷疑param沒有正確設置,可能是發生問題的地方。 –
java.lang.IllegalArgumentException:參數數量錯誤 at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)關於使用集合,我能否使用類似於上面的String [] []數組的二維集合?原因是Testdata需要兩個字符串值,每個測試用例需要是一個數組或類似的數據,並且由於會有多個測試用例,因此它需要一個二維數組。 – user1669327