C# XUnit使用字典作为成员数据
我对如何让XUnit测试方法接受字典作为参数的语法有困难。这是我被破坏的代码:C# XUnit使用字典作为成员数据,c#,xunit,C#,Xunit,我对如何让XUnit测试方法接受字典作为参数的语法有困难。这是我被破坏的代码: Public static Dictionary<string, string> vals = new Dictionary<string, string> { { "a", "1" }, { "b", "2" }, { "ca", "3" } }; public static object[] dicList = new object[] { vals }; [Theory] [Membe
Public static Dictionary<string, string> vals = new Dictionary<string, string> { { "a", "1" }, { "b", "2" }, { "ca", "3" } };
public static object[] dicList = new object[] { vals };
[Theory]
[MemberData(nameof(dicList))]
public void CheckSomething_ReturnsSomething(Dictionary<string, string> values)
{
test stuff...
publicstaticdictionary vals=新字典{{“a”,“1”},{“b”,“2”},{“ca”,“3”};
公共静态对象[]dicList=新对象[]{VAL};
[理论]
[成员数据(名称(dicList))]
public void CheckSomething\u returnsMething(字典值)
{
测试材料。。。
我从抛出的错误中得到一个错误,我知道我需要一个
IEnumerable<object[]>
IEnumerable
我不知道如何用字典来实现这一点
已按建议添加了一些代码:我仍然收到一个错误:
public static Dictionary<string, string> vals = new Dictionary<string, string> { { "a", "1" }, { "b", "2" }, { "ca", "3" } };
public static IEnumerable<object[]> dicList = new List<object[]> { new object[] { vals } };
[Theory]
[MemberData(dicList)] //error here
public void DriverLogon_CheckParams(Dictionary<string, string> values)
{
}
publicstaticdictionary vals=新字典{{“a”,“1”},{“b”,“2”},{“ca”,“3”};
公共静态IEnumerable dicList=新列表{new object[]{vals};
[理论]
[MemberData(dicList)]//此处出错
public void DriverLogon\u CheckParams(字典值)
{
}
新的错误是
error. "Cannot convert from IEnumerable<object[]> To string
error.”无法从IEnumerable转换为字符串
dicList必须是一个IEnumerable
,如错误消息所述。这是因为dicList中的一个项目包含一个测试的所有参数值(这对您的情况无关紧要,因为您只有一个参数,但最好知道)
因此,dicList将成为一个列表
,而不仅仅是普通对象数组:
public static Dictionary<string, string> vals = new Dictionary<string, string> { { "a", "1" }, { "b", "2" }, { "ca", "3" } };
public static IEnumerable<object[]> dicList = new List<object[]> { new object[] { vals } };
publicstaticdictionary vals=新字典{{“a”,“1”},{“b”,“2”},{“ca”,“3”};
公共静态IEnumerable dicList=新列表{new object[]{vals};
我使用了您的代码,但有一个错误。“无法从IEnumerable转换为字符串。@建议的解决方案工作正常,对象[]中的每一项
对应于测试方法中的参数,在您的案例中,字典
。否则请共享其余代码,这将导致error@PaulStanleydicList是对象数组的IEnumerable,每个数组中都有作为参数进入测试方法的值在dicList
中,测试运行一次。如果有2个,则测试将运行两次,第一个测试使用dicList[0]的值,第二个测试使用dicList[1]的值。感谢您添加了更多代码以显示错误位置:)@MemberData属性使用成员的名称,因此它应该是[MemberData](nameof(dicList))]
(我认为您在原始代码示例中的描述是正确的)。