[英]NUnit TestCaseSource how to set parameters from list
我的一個普通Class
methods
生成一個list
的parameters
,我想一直規定他們每個人作為參數傳遞給我的NUnit
測試。
我閱讀了一些關於TestCaseSource
屬性的文檔,但不知道如何實現它。
例如我的方法返回一個列表
“1”、“2”、“3”、“4”
...在我如何將它們中的每一個放入我的測試中。 謝謝!
這是我返回list
method
:
public static List<string> TestCombinationsProvider()
{
List<string> resultList = new List<string>();
List<string> parametersList = new List<string>();
foreach (var item in ReturnDynamicPararmetersEntityProperties())
{
parametersList.Add(item.Name);
}
for (int i = 0; i < parametersList.Count; i++)
{
for (int j = i + 1; j < parametersList.Count; j++)
{
resultList.Add(parametersList[i] + " AND " + parametersList[j]);
}
}
return resultList;
}
和空的Nunit
測試:
[Test]
[TestCaseSource("")]
public void Test1()
{
}
我想對列表中的每一行進行測試
文檔很清楚。 您需要返回測試用例列表,而不是返回List<string>
,例如直接使用IEnumerable<TestCaseData>
:
public static IEnumerable<TestCaseData> TestCombinationsProvider()
{
List<string> resultList = new List<string>();
List<string> parametersList = new List<string>();
foreach (var item in ReturnDynamicPararmetersEntityProperties())
{
parametersList.Add(item.Name);
}
for (int i = 0; i < parametersList.Count; i++)
{
for (int j = i + 1; j < parametersList.Count; j++)
{
yield return new TestCaseData(parametersList[i] + " AND " + parametersList[j]);
}
}
}
該方法有多個不同的簽名,例如還返回object[]
的集合。 但是我不會推薦它們,因為您會失去很多可以使用TestCaseData
做的事情,例如設置每個測試Name
或其Description
。
然后裝飾你的實際測試方法:
[Test]
[TestCaseSource(nameof(TestCombinationsProvider))]
public void Test1(string p)
{
}
編輯:當您的TestCombinationsProvider
-方法在另一個類中時,請改用它:
[TestCaseSource(typeof(TheClass), nameof(TheClass.TestCombinationsProvider))]
TestCaseSourceAttribute 構造函數有兩個重載,如果你需要從另一個類設置數據,你應該使用這個構造函數。
TestCaseSourceAttribute(Type sourceType, string sourceName);
它看起來像這樣:
public class TestData {
public static IEnumerable<string> TestCombinationsProvider()
{
var parametersList = ReturnDynamicPararmetersEntityProperties().Select(x => x.Name).ToList();
for (int i = 0; i < parametersList.Count; i++)
{
for (int j = i + 1; j < parametersList.Count; j++)
{
yield return parametersList[i] + " AND " + parametersList[j];
}
}
}
}
public class Tests
{
[TestCaseSource(typeof(TestData), nameof(TestData.TestCombinationsProvider))]
public void Test1(string test)
{
Assert.Pass();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.