JBehave вызывает неправильный шаг @When

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

@When("I send $method '$url'")
public void sendMethodURL(
    @Named("method") final String method,
    @Named("url") final String url)
{
    // stuff
}

@When("I send $method '$url' with JSON '$body'")
public void sendMethodURLBody(
    @Named("method") final String method,
    @Named("url") final String url,
    @Named("body") final String inputJSON)
{
    // stuff
}

Однако в моей истории есть:

When I send POST '/blah/foo/bar' with JSON '["some", "json"]'

Тем не менее, он вызывает sendMethodURL, где method — это "POST '/blah/foo/bar' with JSON", а URL — "[\"some\", \"json\"]". Ясно, что я предпочел бы, чтобы он вызывал sendMethodURLBody вместо этого.

Что я здесь делаю неправильно? Как я могу заставить JBehave различать два шага?

Редактировать: я понимаю, что RegexStepMatcher соответствует первому @When, который находит совпадение (то есть sendMethodURL)... но как я могу сохранить грамматику такой, какая она есть, но различать два, чтобы она больше не соответствовала обоим шагам? Порядок методов, кажется, работает, но должен быть менее хрупкий способ.


person Depressio    schedule 06.08.2013    source источник


Ответы (1)


У нас была та же проблема, но наш обходной путь — использовать разные формулировки, чтобы отличать шаги друг от друга. Насколько я понимаю, это не ваш вариант. В этом случае я бы порекомендовал обратить внимание на приоритизацию шагов — вы можете установить более высокий приоритет для более длинного шага, чтобы он был опробован первым (см. документацию JBehave: http://jbehave.org/reference/stable/prioritising-steps.html).

person andriyr    schedule 07.08.2013
comment
Ницца. Это то, что я искал. Я понял, что порядок шагов в коде работает, но чувствовал себя слишком хрупким, чтобы с ним было удобно. Я полагал, что в JBehave есть что-то для обработки этого, но я просто еще не нашел его. Спасибо! - person Depressio; 07.08.2013