JUnit抛出IllegalArgumentException

3

我正在尝试对JUnit4测试进行参数化,但是我一直收到IllegalArgumentException:参数数量错误的异常提示,即使我已经三次检查了我的构造函数。 我的代码如下(请注意,变量在类的顶部作为相同类型定义):

@RunWith(Parameterized.class)
public class OrderTest {

private Order order;

public OrderTest(byte id, byte coffee, byte cafelatte, byte smoothie, byte iceCoffee) {
    order = new Order(new byte[] {id, coffee, cafelatte, smoothie, iceCoffee});
}

@Parameters
public static Collection order() {
    return Arrays.asList(new byte[][] {
        {1, 1, 0, 0, 0},
        {2, 1, 1, 0, 0},
        {3, 1, 1, 1, 1},
        {14, 80, 127, 127, 127}
    });
}

我的Order类如下:

public class Order {

public Order(byte[] orders) {
    id = orders[0];
    coffee = orders[1];
    cafeLatte = orders[2];
    smoothie = orders[3];
    iceCoffee = orders[4];
}

3
请问“exception”指的是什么?最好能提供一个[最小完整可复现示例],而不仅仅是片段。 - Jon Skeet
2个回答

2
让我们简洁明了地说:
@RunWith(Parameterized.class)
public class OrderTest {

    @Parameterized.Parameter
    public Order order;

    @Parameterized.Parameters
    public static Collection<Order> orders() {
        return Arrays.asList(
            new Order(1, 1, 0, 0, 0),
            new Order(2, 1, 1, 0, 0),
            new Order(3, 1, 1, 1, 1),
            new Order(14, 80, 127, 127, 127)
        );
    }

如果您在Order类中实现了toString()方法,您可以使用@Parameterized.Parameters(name = "{index}: {0}")替换@Parameterized.Parameters,以便更好地了解当前测试的内容。


1
您可以使用一个带有盒装的Byte的解决方法:
public OrderTest(Byte id, Byte coffee, Byte cafelatte, Byte smoothie, Byte iceCoffee) {
    order = new Order(new byte[] {id, coffee, cafelatte, smoothie, iceCoffee});
}

@Parameters
public static Collection order() {
    return Arrays.asList(new Byte[][] {
        {1, 1, 0, 0, 0},
        {2, 1, 1, 0, 0},
        {3, 1, 1, 1, 1},
        {14, 80, 127, 127, 127}
    });
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接