我怎样才能 return 一个 Dictionary<string, string> 作为一个 IEnumerable<object> XUnit 的 MemberData 需要
How can I return a Dictionary<string, string> as an IEnumerable<object> which XUnit's MemberData requires
我正在尝试使用 xunit 的 MemberDataAttribute
来 return Key/Values 的列表。
例如,像这样:
[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 to cast object of type
'System.Collections.Generic.KeyValuePair2[System.String,System.String[]]'
to type 'System.Collections.Generic.IEnumerable
1[System.Object]'.
您正在尝试将每个 key/value 字典对转换为 IEnumerable。
如果 cardNumbers
是 Dictionary<string, string[]>
,那么您可以这样做:
return cardNumbers.Cast<object>();
字典首先是 IEnumerable<KeyValuePair>
,因此您只需将它们键入对象即可。
我正在尝试使用 xunit 的 MemberDataAttribute
来 return Key/Values 的列表。
例如,像这样:
[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 to cast object of type 'System.Collections.Generic.KeyValuePair
2[System.String,System.String[]]' to type 'System.Collections.Generic.IEnumerable
1[System.Object]'.
您正在尝试将每个 key/value 字典对转换为 IEnumerable。
如果 cardNumbers
是 Dictionary<string, string[]>
,那么您可以这样做:
return cardNumbers.Cast<object>();
字典首先是 IEnumerable<KeyValuePair>
,因此您只需将它们键入对象即可。