gpt4 book ai didi

java - 遍历 Java 中的枚举类数组,测试每个类的 `parse()` 方法

转载 作者:搜寻专家 更新时间:2023-11-01 02:58:09 26 4
gpt4 key购买 nike

我正在尝试高效地为我的 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);
}
}

Demo.

关于java - 遍历 Java 中的枚举类数组,测试每个类的 `parse()` 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46325088/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com