我正在使用类Collection,并且有一行代码,如下所示。 请找到如下所示的完整代码,让我知道此代码有什么问题,因为我收到错误:
java.lang.IllegalArgumentException:参数数量错误
import java.util.Arrays;
import java.util.Collection;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
public class Parameterizing {
String Firstname;
String Lastname;
String Password;
int age;
public void paratemeterizing(String Firstname, String Lastname, String Password, int age) {
this.Firstname = Firstname;
this.Lastname = Lastname;
this.Password = Password;
this.age = age;
}
@Parameters
public static Collection<Object[]> getdata() {
Object[][] data = new Object[2][4];
data[0][0]= "David";
data[0][1]= "Beck";
data[0][2] = "1234";
data[0][3] = 12;
data[1][0]= "David";
data[1][1]= "Bear";
data[1][2] = "12345";
data[1][3] = 21;
return Arrays.asList(data);
}
@Test
public void doLogin() {
System.out.println(Firstname+Lastname+Password+age);
}
}
答案 0 :(得分:3)
我的猜测是,您从getdata()
返回的数据结构的大小与正在测试的方法所需的参数不匹配。
我怀疑Arrays.asList()
没有按照您期望的方式处理这些类型。它是使用varargs声明的,因此我可以调用Arrays.asList(a)
并获取包含一个元素的列表,或者我可以调用Arrays.asList(a, b, c)
并返回包含三个元素的列表。当a
的类型是一个数组时出现问题:你想要一个包含一个数组的列表,还是想要一个包含数组元素的列表?这种模糊性可能是问题(或至少其中之一)。我会像这样重写它:
@Parameters
public static Collection<Object[]> getdata() {
final List<Object[]> result = new ArrayList<>();
result.add( new Object[] {"David", "Beck", "1234", 12} );
result.add( new Object[] {"David", "Bear", "12345", 21} );
return result;
}
(我不熟悉你正在使用的JUnit注释,所以这就是我做出有根据的猜测的原因)