如何使用PropertyData将字符串数组传递给Theory测试

Joh*_*ohn 1 xunit.net

我有一个带有以下签名的测试方法:

[Theory]
[PropertyData("MyTestData")]
public void ProcessLines_validLines_doStuff(string[] lines)
{
   // do stuff
}
Run Code Online (Sandbox Code Playgroud)

我的财产看起来像这样:

public static IEnumerable<string[]> MyTestData
{
get
{
 List<string[]> data = new List<string[]>
 {
    new[] { "1", "1"},
    new[] { "2", "2"}
 };

 var iter = data.GetEnumerator();

 while (iter.MoveNext())
 yeld return iter.Current;
}
}
Run Code Online (Sandbox Code Playgroud)

Xunit抛出一个System.InvalidOperation:预期的1个参数,得到2个参数

有任何想法吗?

小智 6

属性类型应该是IEnumerable<object[]>.对象数组对应于参数列表.即使您的测试方法只有一个参数,您也需要返回一个数组,即使它只有一个元素.

在您的情况下,您可以指定类型,IEnumerable<string[][]>但这可能是造成混淆的原因.

public static IEnumerable<object[]> MyTestData
{
    get
    {
        var data = new []
        {
            new[] { new []{ "1", "1"}},
            new[] { new []{ "2", "2"}}
        };

        return data;
    }
}
Run Code Online (Sandbox Code Playgroud)