有没有一种干净的方法来测试给定的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.