4

JBehave には、特定の状況下で例外をスローする必要がある "when" があります。ただし、これを処理する方法に関するドキュメントは見つかりません。これが私のシナリオです:

6 つの既存のベットがあるゲームがあり、ユーザーがベットしたときのゲームの最大ベットは 6 であるとします。

ユーザーが賭けをしたときに例外をスローしたいので、それはありません。

例外をスローするタイミングが常に必要なわけではないことに注意してください。たとえば、既存のベットが最大ベットよりも少ない場合。その場合、「then」で何らかの保証を行いたいと考えています。

4

3 に答える 3

11

実装の詳細と「コンピューター-ese」はシナリオに属さない


私のBDDの理解は、それが利害関係者に焦点を合わせていることであり、技術者以外の人々が、開発者がコーディングできる方法で、(多かれ少なかれ)自然言語を使用して、システムが行うことになっていることを書くことができます。

テストケースを作成することでTDDを拡張します。

プログラマー以外の人が読める自然言語で。
[ウィキペディア]

とは言うものの、利害関係者は「Then」に「例外をスローする」と書くことは決してありません。彼らはおそらく書くでしょう:

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.

また

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."
于 2010-03-23T13:33:59.663 に答える
2

まだ答えが出ていないので、挑戦してみます。これを行う方法は、例外を 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
  }

}

これは私にとってはうまく機能しますが、慎重な状態管理が必要です。

于 2009-11-18T11:05:33.367 に答える
0

Nils Wloka によって提案されたパターンを使用しました。非常に有効な回答であり、try --> catch を使用して「When」で例外をキャプチャし、「Then」ステップで予想される例外に対して検証します。

于 2015-04-06T18:26:15.990 に答える