C# 如何使用列表测试方法<;列表<;T>;作为Xunit中的输入参数
我想用C# 如何使用列表测试方法<;列表<;T>;作为Xunit中的输入参数,c#,.net,tdd,xunit,xunit.net,C#,.net,Tdd,Xunit,Xunit.net,我想用List作为参数测试一个方法。我使用xunit作为测试框架 这是我试过的 public static IEnumerable<IEnumerable<string>> CombinationData { get { return new List<List<string>> { new List<string>{ "a", "b", "c" },
List
作为参数测试一个方法。我使用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)
{
...
}
公共静态IEnumerable组合数据
{
得到
{
返回新列表
{
新名单{“a”、“b”、“c”},
新列表{“x”、“y”、“z”}
};
}
}
[理论]
[成员数据(名称(组合数据))]
public void组合数据测试(列出数据字符串)
{
...
}
当运行测试时,我得到以下异常
System.ArgumentException:CodeUnitTests.MainCodeTests上的属性组合数据生成的项不是对象[]
堆栈跟踪:位于System.Linq.Enumerable.Where SelectEnumerableInterator`2.MoveNext()
我如何让它工作?这是正确的方法吗?错误信息非常清楚。为
MemberData
提供的函数应返回IEnumerable
,其中
的每一项都是一个测试用例的参数集合IEnumerable
中的每个对象[]
都是测试方法所期望的参数对象
List
作为参数,因此您应该将List
的实例作为对象[]的第一项返回
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 };
}
私有静态IEnumerable组合数据()
{
var testcase=新列表
{
新名单{“a”、“b”、“c”},
新列表{“x”、“y”、“z”}
};
产生返回新对象[]{testcase};
}
@RufusL是VisualStudio中的xunit测试运行程序给了我一个异常。(测试输出窗口)@RufusL引发异常的不是我的代码,而是测试框架。执行过程甚至没有碰到测试方法内部的断点。@RufusL我想有人可以用上面的代码在测试类中重现它,并在开始大括号上放一个断点。我不确定它是否为其他人工作。我可以看到测试框架试图通过遍历CombinationData属性来调用测试方法。它可能需要的是对象[],而不是列表。谢谢,这很有效。我错过了一个事实,那就是你投进了子弹。