我目前正在尝试为一个小型库构建一组或多或少完整的单元测试.由于我们希望允许存在不同的实现,我们希望这组测试是(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.这种方法有什么问题吗?