[英]Exception when using an enum member in parameterized test class with JUnit
我有一个参数化的测试类,枚举成员作为参数。
public enum MyEnum {
A,
B
}
这是测试类的重要部分:
@ParameterizedRobolectricTestRunner.Parameters
public static Collection<Object[]> data() {
return Arrays.asList(new Object[][] {
{MyEnum.A}
});
}
public MyTestClass(MyEnum value) {
}
运行测试时,我得到以下异常:
java.lang.IllegalArgumentException: argument type mismatch
如果我将构造函数更改为
public MyTestClass(Object value) {
MyEnum x = (MyEnum)value;
}
我得到这个例外:
java.lang.ClassCastException: com.test.MyEnum cannot be cast to com.test.MyEnum
有人能告诉我那里有什么事吗? 特别是第二种情况似乎很奇怪。 我主要是一个C#开发人员,所以也许这是Java的特例? 如果我使用像Integer这样的其他数据类型,它可以正常工作。
谢谢你的帮助!
编辑:枚举实际上有8个成员,我刚才在这里改了。 此外,构造函数有多个参数,我只是简化了示例。 值的类型是com.test.MyEnum
Edit2:ParameterizedRobolectricTestRunner是问题所在。 如果我使用(标准)参数化TestRunner,一切正常。 在这种特殊情况下它是可以的,因为我不测试UI。 但是在测试UI时,问题仍然会发生。
该类强制转换异常非常奇怪。 但是,以下代码为我运行:
@RunWith(Parameterized.class)
public class ParamTest {
MyEnum expected;
public enum MyEnum{A,B}
// Each parameter should be placed as an argument here
// Every time runner triggers, it will pass the arguments
public ParamTest(MyEnum expected) {
this.expected = expected;
}
@Parameterized.Parameters
public static Collection<Object[]> data() {
return Arrays.asList(new Object[][] {
{ MyEnum.A },
{ MyEnum.B },
});
}
// This test will run 2 times
@Test
public void myTest() {
System.out.println("Enum is : " + expected);
assertEquals(expected, expected);
}
}
它打印:
Enum是:A
Enum是:B
您也可以像下面这样做。 它有点清洁。
@RunWith(Parameterized.class)
public class ParamTest {
public enum MyEnum{A,B}
@Parameterized.Parameter public MyEnum expected;
@Parameterized.Parameters
public static MyEnum[] data() {
return MyEnum.values();
}
@Test
public void myTest() {
System.out.println("Enum is : " + expected);
assertEquals(expected, expected);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.