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