XUnit, используя словарь в качестве MemberData - PullRequest
0 голосов
/ 20 апреля 2020

У меня проблемы с синтаксисом того, как получить метод теста 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...

Я получаю сообщение об ошибке, которое я понимаю из-за возникшей ошибки, что мне нужен тип возврата

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

1 Ответ

1 голос
/ 20 апреля 2020

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 } };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...