我目前正在尝试为一个小型库构建一套或多或少完整的单元测试。由于我们希望允许存在不同的实现,我们希望这组测试是 (a) 通用的,以便我们可以重新使用它来测试不同的实现,并且 (b) 尽可能完整。对于(b)部分,我想知道是否有测试枚举类型的最佳实践。例如,我有一个枚举如下:
public enum Month {
January,
February,
...
December;
}
在这里,我想确保所有枚举类型都确实存在。这甚至有必要吗?目前我正在使用 Hamcrests assertThat
,如下例所示:
assertThat(Month.January, is(notNullValue()));
缺少“一月”枚举会导致编译时错误,可以通过创建缺少的枚举类型来修复该错误。
我在这里使用 Java,但我不介意您的答案是否适用于其他语言..
编辑:
正如 mkato 和 Mark Heath 都指出的那样,测试枚举可能没有必要,因为当您使用不存在的枚举类型时编译器不会编译。但我仍然想测试这些枚举,因为我们想构建一个单独的类似 TCK 的 test.jar,它将在不同的实现上运行相同的测试。所以我的问题更像是:测试枚举类型的最佳方法是什么?
在考虑了更多之后,我将上面的 Hamcrest 语句更改为:
assertThat(Month.valueOf("January"), is(notNullValue()));
当 1 月(还)不存在时,此语句现在会引发 NPE。这种方法有什么问题吗?