我正在尝试使用类似于此代码的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... }
问题:没有更多的汽车要添加到阵列中。
答案 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());
}
}