2017-01-11 6 views
1

Как бы вы построили аннотацию @Repeat для Junit5?Повторить аннотацию для Junit5

Кроме того, я хочу, чтобы опция имела возможность повторного теста, как один тест в среде IDE.

И каждый повтор должен иметь возможность зарегистрировать его номер каким-либо образом, чтобы вы могли видеть прогресс.

ответ

0

В настоящее время нет способа сделать то, что вы просите, поскольку нет точки расширения, которая позволяет гибко создавать тесты. Но вы могли бы что-то сделать с помощью утилитарного метода, который порождает dynamic tests.

+0

Повторные тестовые вызовы в ближайшее время: https://github.com/junit-team/junit5/pull/642 – Sormuras

0

Я нахожу, что обычно, когда вы хотите повторить весь тест, лучше всего идентифицировать и повторить отладочную операцию (операции) в пределах теста.

например. Представьте, что в следующем коде getResponse() иногда выдает исключение. Вы можете использовать Spring Retry (которые вы можете использовать с или без других весенних проектов):

@Test 
void somethingFlaky() { 
    String actual = new RetryTemplate().execute(retryContext -> getResponse()); 
    assertEquals("Hello World!", actual); 
} 

В этом примере, если getResponse() генерирует исключения 3 раза подряд, то общий тест потерпит неудачу за исключением брошенной в последний попытка. RetryTemplate может быть настроен с различными политиками повторной и обратной политики (например, повторите попытку 8 раз, сон 50 миллисекунд между каждой попыткой, экспоненциальный откат и т. Д.).

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

+1

это выглядит как хороший подход –

3

С M4, JUnit Jupiter обеспечивает поддержку первого класса для повторных испытаний:

@RepeatedTest(10) 
void repeatedTest() { 
    // ... 
} 

Пожалуйста, обратитесь к User Guide документации и дополнительных примеров.