我正在使用类 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);
}
}
Run Code Online (Sandbox Code Playgroud)
我的猜测是您返回的数据结构的大小与getdata()被测试方法所需的参数不匹配。
我怀疑这Arrays.asList()不会以您期望的方式处理类型。它是使用可变参数声明的,因此我可以调用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;
}
Run Code Online (Sandbox Code Playgroud)
(我不熟悉您正在使用的 JUnit 注释,所以这就是我做出有根据的猜测的原因)