2013-08-06 41 views
1

我有兩個類似的措詞步驟,但仍有足夠的不同(我希望):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匹配的第一個@當它發現匹配(它是sendMethodURL)......但我怎麼能保持語法原樣,但區分這兩個,所以它不再符合兩個步驟?這些方法的順序似乎有效,但必須有一個不太脆弱的方法。

回答

1

我們遇到了同樣的問題,但我們的解決方法是使用不同的措辭來區分彼此的步驟。據我瞭解,這不適合你。在這種情況下,我會建議查看步驟的優先順序 - 您可以將較高的優先級設置爲較長的​​步驟,因此將首先嚐試(請參閱JBehave文檔:http://jbehave.org/reference/stable/prioritising-steps.html)。

+0

不錯。這是我正在尋找的。我意識到訂購代碼中的步驟「工作」,但感覺太脆弱了,以至於我無法適應。我想JBehave會處理這件事,但我還沒有找到它。謝謝! – Depressio