我是一位質量保證人,經過一番考慮決定使用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中找到任何這樣的東西,但是有沒有人知道類似於上面的任何可以使用的東西(或者計劃是否有人在項目上工作的讀者會這樣)?
謝謝:)
是啊,我知道,在目前看來,每一種情況下被傳遞迴feature.cs文件,這將成爲測試的靜態清晰度。你的第二段是正確的,我的策略總的來說就是使用好的例子,並正確地設置測試數據。 這個特殊的測試,我想的是一個有點不同,因爲它是一個客戶端集成測試,以確保端到端的基本幸福的路徑正在爲每一個客戶,因爲我的系統包含了很多配置的可能變化,我們需要確信每個客戶端的總體基本數據流總是有效的。 – chrisc
我想另一個問題是,並非SpecFlow可以利用的所有測試運行器都具有與NUnit的TestCaseSource相同的方式,因此甚至可能無法併入。我可以看到如果SpecFlow只使用NUnit轉輪運行,可以這樣做,但考慮到它必須支持其他可能導致缺少該功能的原因。 – chrisc