获取java.lang.IllegalArgumentException:下面的代码片段错误的参数数量错误

时间:2015-10-02 17:27:42

标签: java junit

我正在使用类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);
    }
}

1 个答案:

答案 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注释,所以这就是我做出有根据的猜测的原因)