寫BDD場景的傳統方法是:我怎樣才能使JBehave符合預期驅動的API很好地工作?
Given [some preconditions]
When [My code runs]
Then [some stuff happened]
然而當我想要的預期(也就是,「有些東西發生了」)下測試的代碼之前定義的運行模擬類API工作。爲了同情該API,我必須寫下我這樣的故事:
Given [some preconditions]
And [the expectation that some stuff is going to happen]
When [My code runs]
Then [the expectations I defined above were met]
我不想那麼做。我可以看到周圍的兩項缺憾的方式,這也是我真的不希望做的事情:
- 含蓄地設立「任何」中的一些「給定」步驟類型的期望,請使用「捕獲」功能模擬API將調用隱藏到字段中,並在「Then」步驟中檢查它們。
- ......或使「當」步驟設置的場告訴了AfterScenario步運行我的代碼,因此它推遲到以後的預期已經設置(但阻止我檢查其他後置)
我真的很想爲JBehave看當時的步驟,找到他們的是設定預期的部分,和那些運行前的當。
斯波克達到這個與它的嘲笑(言論表明執行順序):
def translator = Mock(Translator)
void "test something" {
given:
testObj = new MyThing(translator) // 1
when:
def actual = testObj.run("foo") // 3
then:
1 * translator.process("foo") << "bar" // 2 (setup)
// and 4 (post-check)
actual == "bar" // 5
}
有一個整潔的模式,使JBehave做到這一點?
感謝。我使用的「模擬」框架實際上是一個模擬REST服務; rest-client-driver,其中您告訴嵌入式Jetty需要預期的HTTP請求,所以我不能切換到Mockito。 – slim
@slim這裏沒有大量的代碼。打賭你可以將它分叉並寫出適合你在幾天內做的事情。 – Lunivore