Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用列表测试方法<;列表<;T>;作为Xunit中的输入参数_C#_.net_Tdd_Xunit_Xunit.net - Fatal编程技术网

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属性来调用测试方法。它可能需要的是对象[],而不是列表。谢谢,这很有效。我错过了一个事实,那就是你投进了子弹。