我目前正在尝试为小型图书馆建立一套或多或少的完整单元测试。由于我们希望允许不同的实现存在,我们希望这组测试是(a)通用的,以便我们可以重新使用它来测试不同的实现,并且(b)尽可能完整。对于(b)部分,我想知道是否有任何用于测试枚举类型的最佳做法。所以例如我有一个枚举如下:如何测试枚举类型?
public enum Month {
January,
February,
...
December;
}
这里我想确保所有的枚举类型真的存在。这甚至是必要的吗?目前我使用Hamcrests assertThat
像下面的例子:
assertThat(Month.January, is(notNullValue()));
一个失踪“一月”枚举会导致其中一个可以通过创建缺少的枚举类型确定一个编译时错误。
我使用Java在这里,但如果你的答案是不同的语言,我不介意..
编辑:
由于mkato和马克·希思双双指出,测试可枚举没有必要,因为编译器在您使用不存在的枚举类型时不会编译。但我仍然想测试这些枚举,因为我们想构建一个独立的TCK类test.jar,它将在不同的实现上运行相同的测试。所以我的问题更像是:什么是测试枚举类型的最好方法?
想着它之后多一点,我改变了Hamcrest声明以上:
assertThat(Month.valueOf("January"), is(notNullValue()));
这种说法现在抛出一个NPE月份的时候是不是有(还)。这种方法有什么问题吗?
我有一个枚举,有一个方法,我想测试,我是单元测试的新手,无法找出一种方法来编写该方法的测试用例,请您提供一个示例或帮助做到这一点。 – dirtydexter 2014-10-31 12:16:19
如果“assertThat(Month.January,is(notNullValue()));”在OP的问题中,对于你来说还不够,我认为你最好把它当作一个单独的问题,并提供一个你想要测试的例子。听起来像你可能需要帮助JUnit本身。 – aberrant80 2014-11-03 02:42:08