如何将Dictionary <string,string =“”>作为XUnit的MemberData需要的IEnumerable <object>返回

时间:2015-08-17 13:09:49

标签: c# .net xunit

我正在尝试使用xunit的MemberDataAttribute来返回键/值列表。

例如,像这样:

[Theory]
[MemberData("ValidCardData")]
public void GivenANumber_Constructor_CreatesANewInstance(NotSureWhatType data)
{
  ..
}

这就是我试图制作实际数据的方式。

public static IEnumerable<object> ValidCardData
{
    get
    {
        var json = File.ReadAllText("Data\\ValidCards.json");
        var cardNumbers = JsonConvert.DeserializeObject<Dictionary<string, string[]>>(json);

        return cardNumbers
            .Select(x => new KeyValuePair<string, string[]>(x.Key, x.Value))
            .ToList()
            .Cast<IEnumerable<object>>();
    }
}

但它不起作用:

  

System.InvalidCastExceptionUnable可以转换类型的对象   'System.Collections.Generic.KeyValuePair 2[System.String,System.String[]]' to type 'System.Collections.Generic.IEnumerable 1 [System.Object的]'。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:4)

您正在尝试将字典的每个键/值对投射到IEnumerable。

如果cardNumbersDictionary<string, string[]>,那么您可以这样做:

return cardNumbers.Cast<object>();

字典是IEnumerable<KeyValuePair>开头的,所以你只需要将它们作为对象输入。