XUnit 使用字典作为 MemberData

XUnit Using a Dictionary As MemberData

我对如何让 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]
[MemberData(nameof(dicList))]

public void CheckSomething_ReturnsSomething(Dictionary<string, string> values)
{
 test stuff...

我收到一个错误,我从抛出的错误中了解到我需要 return 类型的

IEnumerable<object[]>

我不确定如何用字典实现这一点。

已按照建议添加了一些代码:我仍然遇到错误:

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)
    {
    }

新错误是

error. "Cannot convert from IEnumerable<object[]> To string

dicList 必须是 IEnumerable<object[]>,如错误消息所述。这是因为 dicList 中的一项包含一个测试的所有参数值(这对您的情况无关紧要,因为您只有一个参数,但知道这一点很好)。

所以你的 dicList 变成了 List<object[]> 而不是普通的对象数组:

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 } };