我目前正在尝试为一个小型库构建更完整的单元测试集。由于我们希望允许存在不同的实现,因此我们希望这个测试集是(a)通用的,以便我们可以重复使用它来测试不同的实现,以及(b)尽可能完整。对于(b)部分,我想知道是否有任何最佳实践来测试枚举类型。例如,我有一个如下所示的枚举:
public enum Month {
January,
February,
...
December;
}
我想确保所有的枚举类型都真实存在。这样做真的必要吗?目前我正在使用Hamcrests的 assertThat
,就像下面的例子一样:
assertThat(Month.January, is(notNullValue()));
缺少"January"枚举会导致编译时错误,可以通过创建所缺少的枚举类型来解决。我这里使用的是Java,但如果你的答案是针对其他语言也没关系。编辑:正如mkato和Mark Heath都指出的那样,测试枚举可能是不必要的,因为编译器在使用不存在的枚举类型时不会编译。但我仍然想测试这些枚举,因为我们希望构建一个类似于TCK的独立测试.jar文件,可以在不同的实现上运行相同的测试。因此,我的问题更像是:测试枚举类型的最佳方法是什么?
经过再次思考后,我将上面的Hamcrest语句改为:
assertThat(Month.valueOf("January"), is(notNullValue()));
如果一月份还没出现,这个语句现在会抛出一个NPE异常。这种方法有什么问题吗?