私は SpecFlow を学んでおり、単純な Com-Sci 標準の FizzBuzz プロジェクトを行っています。与えられた数値の範囲 3 で割り切れる数を Fizz に置き換えます。 5 で割り切れる数を Buzz に置き換えます。 3 と 5 で割り切れる数を FizzBuzz に置き換えます。
これは非常に単純なアプリケーションですが、私には疑問が生じました。API の 1 つのメソッド呼び出しからすべてが起動される複数の要件をテストするための機能を作成するにはどうすればよいですか? たとえば、API 呼び出しは次のようFizzBuzz.Replace(1, 100);
になり、Replace メソッド コードは次のようになります。
public static string Replace (int min, int max)
{
if (IsDiv3 && IsDiv5) {...}
if (IsDiv3) {...}
if (IsDiv5) {...}
...
}
SpecFlow での私の機能は次のとおりです。
Feature: FizzBuzz
In order to display Fizz Buzz in range of numbers
As a user I want to be able to see Fizz Buzz replace certain numbers
Scenario: Replace muliples of three and five with Fizz, Buzz or FizzBuzz
Given I have a range of numbers from 1 to 15
When I press Submit
Then the result should be
| Numbers |
| 1 |
| 2 |
| Fizz |
| 4 |
| Buzz |
| Fizz |
| 7 |
| 8 |
| Fizz |
| Buzz |
| 11 |
| Fizz |
| 13 |
| 14 |
| FizzBuzz|
さらなる問題は、すべての要件を 1 つの機能にまとめる必要がある場合、その機能をより意味のあるものにする方法です。
編集 2 つ目のシナリオを作成するとすぐに最初のシナリオが失敗するため、複数のシナリオの作成に苦労しています。
scenario 1: replace divisable by 3 with Fizz
Expected = 1 2 Fizz 4 5 Fizz 7 8 Fizz 10 11 Fizz 13 14 Fizz
Actual = 1 2 Fizz 4 5 Fizz 7 8 Fizz 10 11 Fizz 13 14 Fizz (First test)
Actual = 1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 Fizz (Second test)
次に、次のシナリオを実行します
Scenario 2: replace divisable by 5 with Buzz
Expected = 1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 Fizz
Actual = 1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 Fizz (Second test)
2 番目のシナリオはパスしますが、最初のシナリオは失敗します。シナリオ 1、2、3 を実行するために API を開くことは、アプリにとって良い設計になるとは思いません。
ありがとう、