NUnit TestCaseSource 如何从列表中设置参数
NUnit TestCaseSource how to set parameters from list
我的一个常用 Class
methods
生成 list
的 parameters
我想一致地设置它们中的每一个 作为我的 NUnit
测试的参数。
我阅读了一些关于 TestCaseSource
attribute 的文档,但不知道如何实现它。
例如我的方法 return 列表
"1","2","3","4"
...我如何将它们中的每一个放入我的测试中。谢谢!
这是我的 method
那 return 一个 list
:
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()
{
}
我想运行用列表中的每一行进行测试
文档非常清楚。您需要 return 一个测试用例列表,而不是 returning 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]);
}
}
}
该方法有多个不同的签名,例如还 return 收集了 object[]
。但我不会推荐它们,因为你失去了很多你可以用 TestCaseData
做的事情,例如设置每个测试 Name
或其 Description
.
然后装饰你的实际测试方法:
[Test]
[TestCaseSource(nameof(TestCombinationsProvider))]
public void Test1(string p)
{
}
编辑:当您的 TestCombinationsProvider
方法在另一个 class 中时,请改用此方法:
[TestCaseSource(typeof(TheClass), nameof(TheClass.TestCombinationsProvider))]
TestCaseSourceAttribute 构造函数有两个重载,如果你需要从另一个设置数据class你应该使用这个构造函数。
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();
}
}
我的一个常用 Class
methods
生成 list
的 parameters
我想一致地设置它们中的每一个 作为我的 NUnit
测试的参数。
我阅读了一些关于 TestCaseSource
attribute 的文档,但不知道如何实现它。
例如我的方法 return 列表
"1","2","3","4"
...我如何将它们中的每一个放入我的测试中。谢谢!
这是我的 method
那 return 一个 list
:
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()
{
}
我想运行用列表中的每一行进行测试
文档非常清楚。您需要 return 一个测试用例列表,而不是 returning 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]);
}
}
}
该方法有多个不同的签名,例如还 return 收集了 object[]
。但我不会推荐它们,因为你失去了很多你可以用 TestCaseData
做的事情,例如设置每个测试 Name
或其 Description
.
然后装饰你的实际测试方法:
[Test]
[TestCaseSource(nameof(TestCombinationsProvider))]
public void Test1(string p)
{
}
编辑:当您的 TestCombinationsProvider
方法在另一个 class 中时,请改用此方法:
[TestCaseSource(typeof(TheClass), nameof(TheClass.TestCombinationsProvider))]
TestCaseSourceAttribute 构造函数有两个重载,如果你需要从另一个设置数据class你应该使用这个构造函数。
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();
}
}