我正在學習SpecFlow並正在做一個簡單的Com-Sci標準FizzBuzz項目。 給定一個數字範圍 用Fizz替換3整除 用Buzz將5整除替換 用FizzBuzz替換3和5整除。如何在SpecFlow中爲多個相關需求創建功能
這是一個非常簡單的應用程序,但它確實爲我提出了一個問題。如何編寫特性來測試多個requiremts,這些requiremts全部來自API上的一個方法調用? 例如API調用將如下FizzBuzz.Replace(1, 100);
用替換法碼
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是一個很好的應用程序設計。
感謝,
我認爲其他人提供了很好的具體提示如何進行測試。我認爲道德是,如果您通過示例對API或規範進行TDD並不重要,則不應描述實際上不是「有效」的場景。您的場景1與功能的規格不符,因此它沒有幫助。是的,你應該努力爭取簡單的案例和不同的方面,但根據規範,情景應該都是有效的。如果規範本身隨着系統的發展而變化,那麼您需要相應地更新您的場景,這是另一個問題。 – 2011-06-16 09:28:45