2015-07-22 3 views
1

Я использую cucumber-jvm в своих тестах интеграции, и мне нужно выполнить некоторый код после завершения всех сценариев, только один раз.AfterAll global hook cucumber-jvm

После прочтения внимательно некоторые сообщения, как this и рассмотрел это сообщил issue, я достиг его делать что-то вроде этого:

public class ContextSteps { 

    private static boolean initialized = false; 

    @cucumber.api.java.Before 
    public void setUp() throws Exception { 
     if (!initialized) { 
     // Init context. Run just once before first scenario starts 

     Runtime.getRuntime().addShutdownHook(new Thread() { 
      @Override 
      public void run() { 
       // End context. Run just once after all scenarios are finished 
      } 
     }); 

     initialized = true; 
     } 
    } 
} 

Я думаю инициализации контекста (эквивалент BeforeAll) сделано таким образом, это хорошо , Однако, несмотря на то, что он работает, я не уверен, что если использовать AfterAll с использованием Runtime.getRuntime().addShutdownHook(), это хорошая практика.

Итак, вот мои вопросы:

  • Должен ли я избежать Runtime.getRuntime().addShutdownHook() реализовать AfterAll?
  • Есть ли еще лучший выбор для эмуляции поведения AfterAll в cucumber-jvm?

Заранее за помощь.

ответ

2

Возможно, лучшим способом было бы использовать инструмент построения, такой как Ant, Maven или Gradle для действий по настройке и срыву, которые являются частью тестов интеграции .

При использовании Maven Fail Safe Plug-in для настройки интеграционных тестов. Существует фаза pre-integration-test, которая обычно используется для настройки базы данных и запуска веб-контейнера. Затем выполняются тесты интеграции (этап integration-test). А затем выполняется фаза post-integration-test, для закрытия и закрытия/удаления/очистки вещей.

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

В случае это проще, меньше настроить материал, вы можете посмотреть на JUnit @ BeforeClass и @AfterClass. Или реализовать JUnit @ClassRule, который имеет собственные методы before() и after().

@ClassRule 
public static ExternalResource resource = new ExternalResource() { 
    @Override 
    protected void before() throws Throwable { 
    myServer.connect(); 
    } 

    @Override 
    protected void after() { 
    myServer.disconnect(); 
    } 
}; 
+0

Спасибо, что ответили на @Verhagen! Следуя вашим советам, я в конечном итоге позвоню своему классу/методу в фазе пост-интеграции-теста, используя плагин maven exec. Я согласен с вами, что, вероятно, это был бы лучший выбор. Просто укажите, что я не совсем уверен, могу ли я использовать аннотации junit с cucumber-jvm. Я думаю, что есть некоторые открытые проблемы. Еще раз спасибо! – troig

Смежные вопросы