運行相同的測試兩次應具有相同的結果。單個測試可以通過,也可以失敗。如果你有測試有時會失敗,那麼感覺就像是錯誤的事情發生了。這就是爲什麼NUnit不支持這種開箱即用的原因。我想這也會導致測試運行結果的報告中出現問題,它是否說測試X有效,如果兩者都發生了失敗?
您將在Nunit中獲得的最接近的東西就像TestCaseSource屬性(您已經知道的)。您可以使用TestCaseSource來指定一個方法,該方法可以反過來從文件中讀取。所以,你可以例如有一個文件「cases.txt」它看起來像這樣:
Test1,1,2,3
Test2,wibble,wobble,wet
Test1,2,3,4
然後用這個從你的測試,像這樣:
[Test]
[TestCaseSource("Test1Source")]
public void Test1(string a, string b, string c) {
}
[Test]
[TestCaseSource("Test2Source")]
public void Test2(string a, string b, string c) {
}
public IEnumerable Test1Source() {
return GetCases("Test1");
}
public IEnumerable Test2Source() {
return GetCases("Test2");
}
public IEnumerable GetCases(string testName) {
var cases = new List<IEnumerable>();
var lines = File.ReadAllLines(@"cases.txt").Where(x => x.StartsWith(testName));
foreach (var line in lines) {
var args = line.Split(',');
var currentcase = new List<object>();
for (var i = 1; i < args.Count(); i++) {
currentcase.Add(args[i]);
}
cases.Add(currentcase.ToArray());
}
return cases;
}
這顯然是一個非常簡單的例子,導致Test1
被調用兩次,並且Test2
被調用一次,具有來自文本文件的參數。然而,如果傳遞給測試的參數不同,這將再次起作用,因爲nunit使用參數來創建唯一的測試名稱,儘管您可以通過讓測試源爲每個方法調用生成唯一的編號來解決此問題並將其作爲測試簡單忽略的額外參數傳遞給測試。
另一種方法是讓你從一個反覆調用nunit的腳本中爲文件的每一行運行nunit,但我想這可能會導致你遇到其他問題,當你從多個運行。
看看[數據驅動測試](http://stackoverflow.com/questions/30622972/how-to-do-a-nunit-test-with-parameters/30623089#30623089) – lloyd
你能否澄清爲什麼你想這樣做? –
嗨勞埃德:看起來非常好,但是,它似乎只適用於微軟單元測試工具,而不是NUnit? –