Подтвердить что ты не робот

Почему JUnit MethodRule и TestWatchman устарели?

org.junit.rules.MethodRule и org.junit.rules.TestWatchman устарели.

одно интересное замечание: https://github.com/junit-team/junit/pull/519, в частности: "Многие разработчики являются законными основаниями придерживаться MethodRule, и команда JUnit не планирует удалять поддержку MethodRule..."

http://junit-team.github.io/junit/javadoc/4.10/org/junit/rules/TestWatchman.html документы: "Устаревший метод MethodRule устарел. Используйте TestWatcher вместо TestRule". и предоставляет некоторый пример кода.

В чем причина того, что эти устаревшие? Что такое компромисс между TestWatcher и устаревшим TestWachman? У вас есть хорошая ссылка для краткого обзора или обзора по этой теме?

4b9b3361

Ответ 1

Причина проста, TestRule планировалось заменить MethodRule. MethodRule был введен в 4.7, и это интерфейс с одним методом:

Statement apply(Statement base, FrameworkMethod method, Object target)

FrameworkMethod является (почти) внутренним классом JUnit, который не должен был быть раскрыт в первую очередь. object - это объект, на котором будет запущен метод, например, вы можете изменить состояние теста с помощью отражения.

TestRule было введено в 4.9, однако:

Statement apply(Statement base, Description description)

Description является неизменным POJO, содержащим описание теста. Способ изменения состояния в рамках теста состоит в том, чтобы правильно инкапсулировать внутри теста с помощью TestRule. Это совсем чистый дизайн.

Конкретная разница между TestWatchman(MethodRule) и TestWatcher(TestRule) минимальна, за исключением того, что TestWatcher имеет лучшую обработку ошибок, поэтому это должно использоваться в предпочтении. У обоих есть сложные методы, такие как succeeded(), failed(), starting(), finished().

public static class WatchmanTest {
   private static String watchedLog;

   @Rule
   public TestWatcher watchman= new TestWatcher() {
     @Override
     protected void failed(Throwable e, Description description) {
       watchedLog+= description + "\n";
     }

     @Override
     protected void succeeded(Description description) {
       watchedLog+= description + " " + "success!\n";
     }
   };

   @Test
   public void fails() {
     fail();
   }

   @Test
   public void succeeds() {
   }
}

TestWatcher(TestRule) обрабатывает исключения в переопределенных методах. Если выбрасываются исключения, тогда метод тестирования выходит из строя после выполнения теста, а не во время.

Для получения дополнительной информации см. TestWatcher и TestWatchman