Domanda
Ho un "quando" in JBehave che in determinate circostanze dovrebbe generare un'eccezione. Non posso trovare alcuna documentazione, tuttavia, su come gestire questa situazione. Qui è il mio piano d'azione:
dato un gioco con 6 scommesse esistenti e le scommesse max del gioco sono 6 quando un utente effettua una scommessa
non c'è, allora, perché voglio un'eccezione generata quando l'utente posiziona la scommessa.
Tenete a mente, non sempre voglia il quando un'eccezione. Per esempio. quando le puntate esistenti sono meno di scommesse max. In questo caso, voglio fare un po 'assicurare nel "poi".
Soluzione
Dettagli di implementazione e di "Computer-ese" non appartengono a scenari
La mia comprensione di BDD è che è degli stakeholder -focused, permettendo non tecnico le persone a scrivere ciò che un sistema che deve fare, utilizzando (più o meno) naturali il linguaggio, in modo che gli sviluppatori possono codificare a:
Si estende TDD scrivendo casi di test:
in un linguaggio naturale che non programmatori possono leggere.
[ wikipedia ]
Detto questo, una delle parti interessate non avrebbe mai scrivere "un'eccezione" in un "Poi". Avevano probabilmente scrivono:
Given a game where 6 bets are allowed and 5 bets have been made,
When a user makes the 6th bet,
Then the "Bet" button should become disabled.
o
Given a game where 6 bets are allowed and 6 bets have been made,
When a user tries to make a bet,
Then the a message appears, saying:
"You can not bet. The maximum of 6 bets has already been placed."
Altri suggerimenti
Non ci sono ancora risposte, io darò una prova. Il modo di fare questo è memorizzando eccezione come parte dello stato interno della attuazione Steps`:
public class MySteps extends Steps {
private Throwable throwable = null;
@When("something happens")
public void somethingHappens() {
try {
// Event part of the specification
} catch (MyException e) {
throwable = e;
}
}
@Then("an exception is thrown") {
public void verifyException() {
assertThat(throwable, allOf(notNullValue(), myExceptionMatcher()));
}
private Matcher<Throwable> myExceptionMatcher() {
// Build and return some Matcher instance
}
}
Questo funziona bene per me, ma richiede un'attenta gestione dello stato.
Abbiamo usato il modello suggerito da Nils Wloka, risposta molto valida, catturare l'eccezione in "Quando" utilizzando prova -.> Cattura e poi convalidare contro eccezione prevista nel "Allora" step