我正在学习 SpecFlow,并且正在做一个简单的 Com-Sci 标准 FizzBuzz 项目。给定一个数字范围 用 Fizz 替换能被 3 整除 用 Buzz 替换能被 5 整除 用 FizzBuzz 替换能被 3 和 5 整除。
这是一个非常简单的应用程序,但它确实给我提出了一个问题。如何编写功能来测试多个需求,这些需求都是从 API 上的一个方法调用中触发的?例如,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|
另一个问题是,如果我确实需要将所有需求集中在一个功能中,如何使该功能更有意义。
编辑 我正在努力创建多个场景,因为一旦我创建了第二个场景,第一个场景就会失败。
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)
第二个场景通过了,但第一个场景现在失败了。我不认为开放 API 来执行场景 1、2、3 对应用程序来说是一个好的设计。
谢谢,