将值添加到Java ENUM以进行测试

时间:2018-10-19 15:05:07

标签: java unit-testing testing jmockit

我正在尝试使用类似于此代码的JMockit进行一些多线程测试:

class scratch_1 {
    public static void main(String[] args) {

        for (final Car ex: Car.values()) {
            System.out.println(ex.getValue());
        }
    }
}

enum Car {
    A(1);

    public int getValue() {
        return value;
    }

    private final int value;

    Car(final int value){
        this.value = value;
    }
}

问题是要对此进行测试,我的for周期应处理多个Car(多线程逻辑发生在内部)。但是,我无法更改枚举,因为此时我们只有1辆车,但在接下来的春天将有更多的车。

如何在运行时添加仅用于测试的其他汽车?

编辑:

这是我尝试过的无效的方法:

新车(2); ->没有新的列举者

使用2个SpecialCars创建一个名为SpecialCar的第二类,并在测试期间替换它们。

SpecialCar类扩展->枚举不能扩展

从Car中模拟values()方法。

new Expectations() {
            {
                 car.values();
                 result = {car.A... }

问题:没有更多的汽车要添加到阵列中。

2 个答案:

答案 0 :(得分:1)

Car.values()。因此,要么等待编写单元测试,要么:

添加第二个Car值,根据values()编写单元测试,对特定常数不可知。 删除第二个Car值,然后全部输入到版本控制系统中。

某些测试可能只是一个值而无法使用,甚至可能需要检查if (Car.values().length != 0)

答案 1 :(得分:0)

您可以让您的枚举实现一个接口,并让一个测试枚举也实现该接口,然后将适当的枚举的类传递给测试。

public interface Vehicle {
    public int getValue();
}

public enum Car implements Vehicle {
    A(1);

    public int getValue() {
        return value;
    }

    private final int value;

    Car(final int value){
        this.value = value;
    }
}

public enum TestCar implements Vehicle {
    A(1), B(2);

    public int getValue() {
        return value;
    }

    private final int value;

    Car(final int value){
        this.value = value;
    }
}

public void test(Class<? extends Vehicle> clazz) {
    for (final Vehicle vehicle : clazz.getEnumConstants()) {
        System.out.println(vehicle.getValue());
    }
}