我想测试一个以List<List<string>>
为参数的方法。我使用xunit作为测试框架。
这是我尝试过的。
public static IEnumerable<IEnumerable<string>> CombinationData
{
get
{
return new List<List<string>>
{
new List<string>{ "a", "b", "c" },
new List<string>{ "x", "y", "z" }
};
}
}
[Theory]
[MemberData(nameof(CombinationData))]
public void CombinationDataTest(List<List<string>> dataStrings)
{
...
}
运行测试时出现以下异常。
System.ArgumentException:
CodeUnitTests.MainCodeTests上的属性CombinationData产生了一个不是对象的项目[]
堆栈跟踪:在System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
如何让它发挥作用?这是正确的做法吗?
答案 0 :(得分:2)
错误信息非常清楚。为MemberData
提供的功能应返回IEnumerable<object[]>
,其中
IEnumerable
的每个项目都是一个测试用例的参数集合object
中的每个object[]
都是测试方法所需的参数您的测试方法需要List<List<string>>
作为参数,因此您应该返回List<List<string>>
的实例作为object[]
的第一项
private static IEnumerable<object[]> CombinationData()
{
var testcase = new List<List<string>>
{
new List<string>{ "a", "b", "c" },
new List<string>{ "x", "y", "z" }
};
yield return new object[] { testcase };
}