В настоящее время я пытаюсь построить более или менее полный набор модульных тестов для небольшой библиотеки. Поскольку мы хотим разрешить существование различных реализаций, мы хотим, чтобы этот набор тестов был (а) общим, чтобы мы могли повторно использовать его для тестирования различных реализаций и (б) как можно полнее. Для части (b) я хотел бы знать, есть ли какая-либо лучшая практика для тестирования типов перечислений. Так, например, у меня есть перечисление следующим образом:
public enum Month {
January,
February,
...
December;
}
Здесь я хочу убедиться, что все типы перечислений действительно существуют. Это даже необходимо? В настоящее время я использую Hamcrests assertThat
, как в следующем примере:
assertThat(Month.January, is(notNullValue()));
Отсутствие перечня "Январь" приведет к ошибке времени компиляции, которую можно исправить, создав отсутствующий тип перечисления.
Я использую Java здесь, но я не против, если ваш ответ для другого языка.
Edit:
Поскольку mkato и Mark Heath оба указали, что перечисления для тестирования могут быть не нужны, поскольку компилятор не будет компилироваться, когда вы используете тип перечисления, которого нет. Но я все же хочу протестировать эти перечисления, так как мы хотим создать отдельный TCK-подобный test.jar, который будет запускать те же тесты для разных реализаций. Таким образом, мой вопрос был больше похож: как лучше всего проверить типы перечислений?
Подумав об этом чуть больше, я изменил инструкцию Hamcrest выше:
assertThat(Month.valueOf("January"), is(notNullValue()));
Это утверждение теперь бросает NPE, когда января нет (пока). Что-то не так с этим подходом?