Динамический вызов шагов JBehave изнутри Java

В Java у меня есть объект String с текстом, который я хочу сопоставить и выполнить JBehave в качестве шага. Как это может быть сделано? Можно ли это сделать?

Что я действительно пытаюсь сделать, так это иметь шаг-оболочку JBehave, который инструментирует другой произвольный шаг JBehave. Он делает несколько вещей до и после вызова "внутреннего" шага.

Итак, скажем, у меня уже есть следующее

When I say Hello World

и

@When("I say $text")
public void iSay(final String text)
{
    System.out.println(text);
}

Я хочу иметь возможность сделать следующее:

When I repeat 4 times I say Hello World

он вызовет:

@When("I repeat $count times $subStepString")
public void repeat(final int repeatCount, final String subStepString)
{
    // prep code here
    for (int i = 0; i < repeatCount; i++)
    {
        howDoIdoThisBitHere(subStepString);
    }
    // post process code here
}

Часть, которая говорит, как DoIdoThisBitHere(...) должна в конечном итоге привести к тому, что JBehave будет соответствовать значению subStepString, как если бы оно встречалось в случае выше. Таким образом, я могу использовать этот метод для вызова других произвольных вещей.


person Mad G    schedule 14.10.2015    source источник
comment
Было бы полезно увидеть сегмент кода, на который вы ссылаетесь.   -  person devlin carnate    schedule 14.10.2015
comment
Дополнен некоторым примером (псевдо-)кода, чтобы проиллюстрировать   -  person Mad G    schedule 14.10.2015


Ответы (1)


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

@When("I repeat $count times $subStepString")
public void repeat(final int repeatCount, final String subStepString)
{
    // prep code here
    for (int i = 0; i < repeatCount; i++)
    {
        StoryParser sp = configuration().storyParser();
        Story s = sp.parseStory(subStepString);
        StoryRunner e = configuredEmbedder().storyRunner();
        e.run(configuration(), configuredEmbedder().candidateSteps(), s);
    }
}
person Chrizt0f    schedule 14.10.2015