JUnit пользовательская аннотация - PullRequest
10 голосов
/ 27 октября 2011

Я хотел создать пользовательскую аннотацию JUnit, похожую на ожидаемый тег в @Test, но я также хочу проверить сообщение аннотации.

Любые подсказки, как это сделать, или, может быть, что-то готово

Ответы [ 3 ]

5 голосов
/ 28 октября 2011

JUnit 4.9 ужесточил использование библиотеки "правил" для тестов, которые, я думаю, могли бы работать так же, как и пользовательские аннотации.Взгляните на TestRule в качестве отправной точки.Вы можете реализовать правило на основе этого интерфейса, а затем использовать аннотации @ClassRule или (на уровне метода) @Rule, чтобы использовать их в своих тестах.

Хорошим конкретным примером является ExpectedException, который позволяет вам указывать исключения, такие как ожидаемый параметр для @Test (а затем и некоторые).

5 голосов
/ 28 октября 2011

Чтобы JUnit4 мог забрать ваши пользовательские аннотации, вам нужно написать свою собственную реализацию Runner, а затем передать ее в RunWith-аннотацию класса Test.

Вы можете начать с взгляда на BlockJUnit4ClassRunner, который является бегуном реализации по умолчанию для JUnit 4 (если память мне хорошо).

Предполагая, что вы захотите подобрать пользовательскую аннотацию с именем @MyTest вместе с пользовательским бегуном MyRunner, ваш тестовый класс будет выглядеть примерно так:

@RunWith(MyRunner.class)
class Tests {
   ...
   @MyTest
   public void assumeBehaviour() {
      ...
   }
}

Ответ «Reid Mac» довольно неплохо показывает, как реализована пользовательская аннотация.

1 голос
/ 19 марта 2013

Вы можете создать пользовательский TestRule , как упомянуто в первом ответе, или вы можете использовать / расширить TestWatcher , у которого уже есть метод для обработки начала / конца теста.Существует метод apply(Statement base, Description description), где описание на самом деле является оберткой вокруг вашего метода тестирования. Описание имеет отличный метод getAnnotation (annotationClass) , который позволит вам делать то, что вы хотите, указав пользовательскую аннотацию, которую вы хотите обработать

...