2015-10-14 2 views
0

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

То, что я действительно пытаюсь сделать, это иметь обертку 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, как если бы оно было встречено в приведенном выше случае. Таким образом, я могу использовать этот метод для вызова других произвольных вещей.

+1

Было бы полезно, чтобы увидеть сегмент кода, который вы имеете в виду –

+0

Расширенной с некоторым, например (psuedo-) кода, чтобы помочь проиллюстрировать –

ответ

0

Я не уверен, что это отличная идея, поскольку классы шагов не должны иметь никакой зависимости от основной конфигурации (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); 
    } 
} 
Смежные вопросы