2013-02-07 62 views
1

我是一位質量保證人,經過一番考慮決定使用SpecFlow進行自動測試。我認爲這是輝煌的,但缺少一個功能,我沒有與其他測試運行,如NUnit的經常使用 - 類似的東西從NUnit的的TestCaseSource屬性來指定測試,以防止在運行時跑了潛在的動態數據集。SpecFlow - 如何使用數據驅動的測試,如NUnits TestCaseSource屬性?

我會經常在各種環境測試應該運行在不同的數據,所以測試參數不能指定硬編碼值。一個小示例是用於檢查每個類型的用戶帳戶是能夠登錄,可以使用DB查詢來在NUnit的動態填充每個測試用例被檢索的用戶帳戶憑據:

public List<User> GetTestData() 
{ 
    List<User> testData = new List<User>(); 
    testData = MyDatabase.GetAllUsersInfo().ToList(); 

    return testData; 
} 

[Test, TestCaseSource("GetTestData")] 
public void CallLoginService(User user) 
{ 
    var response = LoginController.TryLogin(User.UserName, User.Password); 

    if (response.Error != null) 
    { 
     Assert.Fail("Failed to Login: {0}", response.Error); 
    } 

    Assert.AreEqual("Logged in ok", response.Message, "Login message not as expected"); 
} 

顯然,這是一個簡單的例子的功能,但我認爲它描述得很好。我知道我們有能力在SpecFlow中使用場景概要和測試運行輸入數據表,但這仍然是靜態的,所以不適合賬單。

我一直在尋找一段時間,還沒有在SpecFlow中找到任何這樣的東西,但是有沒有人知道類似於上面的任何可以使用的東西(或者計劃是否有人在項目上工作的讀者會這樣)?

謝謝:)

回答

1

我不知道,如果這樣的事情是計劃,但現在的問題是,有,當你通過Visual Studio的編輯功能,文件中的後臺代碼生成步驟。

當它被保存在Visual Studio中它被解析並轉換成feature.cs文件,那就是被編譯並用於測試的一個。

所以你的過程將變得

  • 編輯您的數據源
  • 出口爲特色文件
  • GET specflow的VS插件,通過轉換到feature.cs
  • 運行的MSBuild
  • 運行測試NUnit的或類似的

我不會做這個。相反,我會專注於讓我的測試成爲更好的例子。這聽起來像你試圖詳盡地涵蓋每一種可能性。不要拿出例子來涵蓋每一種可能的情況,而是用更少的測試覆蓋儘可能多的邏輯。

+0

是啊,我知道,在目前看來,每一種情況下被傳遞迴feature.cs文件,這將成爲測試的靜態清晰度。你的第二段是正確的,我的策略總的來說就是使用好的例子,並正確地設置測試數據。 這個特殊的測試,我想的是一個有點不同,因爲它是一個客戶端集成測試,以確保端到端的基本幸福的路徑正在爲每一個客戶,因爲我的系統包含了很多配置的可能變化,我們需要確信每個客戶端的總體基本數據流總是有效的。 – chrisc

+0

我想另一個問題是,並非SpecFlow可以利用的所有測試運行器都具有與NUnit的TestCaseSource相同的方式,因此甚至可能無法併入。我可以看到如果SpecFlow只使用NUnit轉輪運行,可以這樣做,但考慮到它必須支持其他可能導致缺少該功能的原因。 – chrisc

相關問題