我正在尝试高效地为我的 Java 枚举类编写一些 Junit 测试,并测试 parse()
每个的方法。这是一次为 FileFormatCodeEnum
执行一个操作的示例:
@Test
public void testFileFormatCodeEnum() {
FileFormatCodeEnum[] ens = FileFormatCodeEnum.values();
for(FileFormatCodeEnum en : ens) {
Assert.assertEquals(FileFormatCodeEnum.parse(en.getValue()), en);
}
}
因为我项目中的每个枚举类都有一个 parse()
方法,我不希望通过替换找到的所有类名来为它们中的每一个编写相同的代码。
我想做更多像这样的事情:
@Test
public void testAllEnums() {
ArrayList<Class> allEnums = new ArrayList<Class>();
allEnums.add(FileFormatCodeEnum.class);
allEnums.add(RoleTypeCodeEnum.class);
//begin some pseudo-code here
for (Class clazz : allEnums) {
//TODO: get clazz.values() of the enum into an array named 'ens'
for(Generic en : ens) {
//cast the generic enum to a specific enum type maybe?
//then execute the parse method on the specific enum
Assert.assertEquals(SpecificEnum.parse(en.getValue()), en);
}
}
}
我不太确定如何使用反射(?)来实现这一点。
谁知道有没有简单的方法?
最佳答案
创建一个类来存储“测试对”——所有枚举的列表,以及一个解析它们的文本值的函数:
class TestEnum {
private final List<Enum> values;
private final Function<String,Enum> parse;
public TestEnum(List<Enum> v, Function<String,Enum> p) {
values = v;
parse = p;
}
public List<Enum> getValues() { return values; }
public Function<String,Enum> getParse() { return parse; }
}
List<TestEnum> allEnums = Arrays.asList(
new TestEnum(Arrays.asList(FileFormatCodeEnum.values()), s -> FileFormatCodeEnum.parse(s))
, new TestEnum(Arrays.asList(RoleTypeCodeEnum.values()), s -> RoleTypeCodeEnum.parse(s))
);
现在您可以遍历所有枚举并测试它们的 parse
方法,如下所示:
for (TestEnum t : allEnums) {
for (Enum v : t.getValues()) {
Assert.assertEquals(t.getParse().apply(v.toString()), v);
}
}
关于java - 遍历 Java 中的枚举类数组,测试每个类的 `parse()` 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46325088/