Pergunta

Eu tenho um "quando" em JBehave que sob certas circunstâncias deve lançar uma exceção. Eu não posso encontrar qualquer documentação, no entanto, sobre como lidar com isso. Aqui está meu cenário:

dado um jogo com 6 apostas existentes e apostas max do jogo são 6 Quando um usuário faz uma aposta

não há nenhum então, desde que eu quero uma exceção lançada quando o usuário coloca a aposta.

Tenha em mente, eu não quero sempre o momento de lançar uma exceção. Por exemplo. quando as apostas existentes são menos de apostas max. Nesse caso, eu quero fazer alguma garantia no "depois".

Foi útil?

Solução

Detalhes de Implementação e "Computer-ese" não pertencem Cenários


O meu entendimento de BDD é que é stakeholders , centrado, permitindo não técnica as pessoas a escrever o que um sistema é suposto fazer, usando (mais ou menos) naturais linguagem, de modo que os desenvolvedores podem código para:

Ele se estende TDD escrevendo casos de teste:

em uma linguagem natural que não-programadores podem ler.
[ wikipedia ]

Dito isto, uma parte interessada nunca iria escrever "lançar uma exceção" em um "Then". Eles provavelmente iria escrever:

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.

ou

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."

Outras dicas

Como não há respostas ainda, vou dar-lhe uma tentativa. A forma como eu fazer isso é armazenar a exceção como parte do estado interno da implementação 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
  }

}

Isso funciona bem para mim, mas exige uma gestão cuidadosa do estado.

Nós temos utilizado o padrão sugerido por Nils Wloka, resposta muito válida, capturar a exceção no "Quando" usando tentativa -.> Captura e, em seguida, validar contra exceção esperada em "Then" passo

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top