Огурец 5: получить имя шага из файла функций, исключая синтаксис корнишона (данные, когда, тогда и)

Поэтому мне нужно получить описания шагов теста после синтаксиса корнишона.

Feature: User trades stocks   Scenario: User requests a sell before close of trading
Given I have 100 shares of MSFT stock
   And I have 150 shares of APPL stock
   And the time is before close of trading

Итак, что мне действительно нужно, так это получить

I have 100 shares of MSFT stock

I have 150 shares of APPL stock

the time is before close of trading

Я обнаружил это, когда обновлял огурец до версии 5.0.0-RC1:

Может ли кто-нибудь помочь мне с фрагментом? Какой объект нужно передать в AfterStep и BeforeStep?


person Miel Yan    schedule 30.06.2019    source источник
comment
Данные, которые вы ищете, содержатся в gherkin.ast.Step, доступ к ним осуществляется через настраиваемый модуль форматирования. Реализуйте EventListener или ConcurrentEventListener и настройте обработчики для различных интересующих вас событий. Взгляните на HTMLFormatter - github.com/cucumber/cucumber-jvm/blob/master/core/src/main/java/   -  person Grasshopper    schedule 01.07.2019
comment
@Grasshopper ссылка, кажется, не работает. Я использую огурец v5.0.0-RC1. Можете ли вы помочь мне с фрагментом, как это реализовать? :|   -  person Miel Yan    schedule 06.11.2019
comment
github.com/cucumber/cucumber-jvm/blob/master/core/src/main/java/   -  person Grasshopper    schedule 06.11.2019


Ответы (1)


Это кодовое решение (в классе serviceHook) для огурца v4.3.1.

PickleStepTestStep currentStep;
private int counter = 0;

@BeforeStep
public void getStepName(Scenario scenario) throws Exception {

    Field f = scenario.getClass().getDeclaredField("testCase");
    f.setAccessible(true);
    TestCase r = (TestCase) f.get(scenario);

    List<PickleStepTestStep> stepDefs = r.getTestSteps()
            .stream()
            .filter(x -> x instanceof PickleStepTestStep)
            .map(x -> (PickleStepTestStep) x)
            .collect(Collectors.toList());

    currentStep = stepDefs.get(counter);

        System.out.println(currentStep.getStepText());

    }

@AfterStep
public void afterStep(Scenario scenario) {
    counter += 1;
}
person Miel Yan    schedule 01.09.2019