小编seb*_*seb的帖子

如何测试枚举类型?

我目前正在尝试为一个小型库构建一组或多或少完整的单元测试.由于我们希望允许存在不同的实现,我们希望这组测试是(a)通用的,以便我们可以重用它来测试不同的实现,并且(b)尽可能完整.对于(b)部分,我想知道是否有任何最佳实践用于测试枚举类型.例如,我有一个枚举如下:

public enum Month {
    January,
    February,
    ...
    December;
}
Run Code Online (Sandbox Code Playgroud)

在这里,我想确保所有枚举类型确实存在.这甚至是必要的吗?目前我正在使用Hamcrests assertThat,如下例所示:

assertThat(Month.January, is(notNullValue()));
Run Code Online (Sandbox Code Playgroud)

缺少"January"枚举会导致编译时错误,可以通过创建缺少的枚举类型来解决.

我在这里使用Java,但我不介意你的答案是否适用于其他语言.

编辑:

由于mkato和Mark Heath都指出测试枚举可能没有必要,因为当你使用不存在的枚举类型时编译器将无法编译.但我仍然想测试这些枚举,因为我们想要构建一个单独的TCK类test.jar,它将在不同的实现上运行相同的测试.所以我的问题更像是:测试枚举类型的最佳方法是什么?

在考虑了一下后,我将上面的Hamcrest声明更改为:

assertThat(Month.valueOf("January"), is(notNullValue()));
Run Code Online (Sandbox Code Playgroud)

当1月不存在时,该声明现在抛出NPE.这种方法有什么问题吗?

enums unit-testing hamcrest

17
推荐指数
4
解决办法
8万
查看次数

标签 统计

enums ×1

hamcrest ×1

unit-testing ×1