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

现在我明白了

Expected: is <SUNDAY>
Actual: SUNDAY

我想避免在每次检查时都添加.name()
assertThat("SUNDAY", is(SUNDAY.name()))


assertThat("SUNDAY", isEnum(SUNDAY))

我不是在问如何编写自己的Matcher,而是在问是否已经构建了一些东西,但我似乎找不到。

最佳答案

选项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.

10-06 14:03