2013-03-08 2 views
2

Есть ли способ продолжить выполнение шагов огурца, даже если один из шагов не выполнен. В моей текущей настройке, когда шаг выходит из строя, огурец пропускает оставшиеся шаги .... Интересно, есть ли способ обмануть установку огурцов.продолжить выполнение шагов огурца после сбоя

Я мог бы прокомментировать неудачные шаги, но это не практично, когда вы не знаете, какие шаг будет терпеть неудачу ... Если бы я мог продолжить с оставшимся шагом, я бы знал полный набор неудачных тестов одним выстрелом .... вместо того, чтобы идти в цикл цикла ...

Окружающая среда: Огурцы JVM, R, Java , Ibathis, Spring Framework, Maven

ответ

3

Не рекомендуется продолжать выполнение шагов после шагового сбоя, так как отказ шага может оставить мир с инвариантным нарушением. Лучшей стратегией является увеличение детализации ваших сценариев. Вместо написания одного сценария с несколькими операциями «Далее» используйте список примеров для отдельного тестирования каждого постусловия. Иногда сценарий сценария и список примеров могут консолидировать похожие истории. https://cucumber.io/docs/reference#scenario-outline

Существует некоторая дискуссия о добавлении функции для отметки определенных шагов для продолжения после сбоя. https://github.com/cucumber/cucumber/issues/79

+0

Я вижу это много лет назад, но если вы можете, не могли бы вы обновить неработающую ссылку? – pelican

0

Одним из способов было бы уловить все ошибки утверждения и на последнем этапе принять решение о сбое или передаче тестового примера. В этом случае вы можете настроить его, скажем, проверить на любом шаге, чтобы увидеть, есть ли более чем n ошибок и не выполнить тест, если это так.

Вот что я сделал:

  1. инициализировать StringBuffer для ошибок в вашем @Before для тестов
  2. поймать утверждение ошибки и добавить к StringBuffer, так что они не бросят и прекратить тест.
  3. Проверьте StringBuffer, чтобы определить, следует ли сбрасывать тестовый пример.

    StringBuffer verificationErrors; 
    
    // Initialize your error SringBuffer here 
    
    @Before 
    public void initialize() { 
        verificationErrors = new StringBuffer(); 
    } 
    // The following is one of the steps in the test case where I need to assert  something 
    
    @When("^the value is (\\d+)$") 
    public void the_result_should_be(int arg1) { 
        try { 
         assertEquals(arg1, 0); 
        } 
        catch(AssertionError ae) { 
         verificationErrors.append("Value is incorrect- "+ae.getMessage()); 
        } 
    

Проверьте StringBuffer в @After или в последнем шаге теста, чтобы определить, если вы можете передать его или не его, а именно:

if (!(verificationErrors.size()==0)) { 
    fail(verificationErrors.toString()); 
} 

Единственная проблема будет что в отчете все этапы выглядят зелеными, но тестовый пример выглядит неудачным. Тогда вам, возможно, придется просмотреть строку «Ошибки», чтобы узнать, какие шаги не удались. Вы можете добавить дополнительную информацию в String всякий раз, когда есть ошибка утверждения, которая поможет вам легко найти шаг.

+1

«Единственная проблема заключается в том, что в отчете все этапы выглядят зелеными, но тестовый пример выглядит неудачным». Именно поэтому вы не хотите этого делать. – Ariejan

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