将字符串与枚举名称

时间:2016-02-09 10:37:59

标签: java testing matcher hamcrest

是否有任何干净的方法来测试给定的String是否与枚举名称匹配?

现在我得到了

Expected: is <SUNDAY>
Actual: SUNDAY

我希望避免在每次检查中添加.name()

assertThat("SUNDAY", is(SUNDAY.name()))

某事

assertThat("SUNDAY", isEnum(SUNDAY))

我不是在问我如何写自己的Matcher,我在问是否已经建立了一些我似乎无法找到的东西。

1 个答案:

答案 0 :(得分:4)

选项1

您可以使用Enum.valueOf(DAYS.class, "Sunday")。我只是命名你的枚举DAYS,因为我不知道它的名字。这就是Enum.valueOf的作用:

  

返回指定枚举类型的枚举常量   指定的名称。名称必须与使用的标识符完全匹配   声明此类型的枚举常量。 (无关的空白   不允许使用字符。)

换句话说,如果存在这样的枚举值,您将获得枚举实例,否则您将获得异常。因此,您可以断言结果并检查是否获得值或抛出异常。

选项2

您可以按如下方式创建HashSet

HashSet<String> set = new HashSet<>();
for (final DAYS day : EnumSet.allOf(DAYS.class)) {
  set.add(day.name());
}

然后检查特定日期是否设置contains

assertTrue(set.contains("SUNDAY")); //Hope I'm using the assertion syntax right. Haven't used this framework before.