Способ отображения имени набора данных MemberData в VS Test Explorer (XUnit)? - PullRequest
0 голосов
/ 29 ноября 2018

Используя XUnit, у меня есть метод с несколькими атрибутами MemberData (ссылаясь на сложную структуру данных).Это работает хорошо, но проблема в том, что если какой-либо из наборов данных MemberData не прошел тест, трудно определить, какой из них был, потому что в VS Test Explorer рядом с уведомлением о неудачном тесте вместо имени набора данных отображаются аргументы метода.

пример:

    [Theory]
    [MemberData(nameof(DataSet1))]
    [MemberData(nameof(DataSet2))]
    [MemberData(nameof(DataSet3))]
    [MemberData(nameof(DataSet4))]
    public void TestMethod(IEnumerable<string> argument1, IEnumerable<string> argument2, decimal argument3) {
        Assert.True(argument3 == 100m);
    }

    public static IEnumerable<object[]> DataSet1
        => new object[][]
        {
            new object[]
            {
                new List<string>()
                {
                    "string 1",
                    "string 2",
                    "string 3",
                    "string 4",
                    "string 5",
                },
                new List<string>()
                {
                    "string 1",
                    "string 2",
                    "string 3",
                    "string 4",
                    "string 5",
                },
                100m
            }
        };

VS Вывод Test Explorer (невозможно добавить изображение из-за отсутствия репутации, поэтому добавляется текст):

Result1 Name: (...) TestMethod(argument1: ["string 1", "string 2", "string 3", "string 4", "string 5"], argument2: ["string 1", "string 2", "string 3", "string 4", "string 5"], argument3: 200)
Result1 Outcome: Failed

поэтому в качестве обходного пути я добавляю еще один аргумент с именем набора данных, например:

public void TestMethod(string testName, // added workaround
    IEnumerable<string> argument1, IEnumerable<string> argument2, decimal argument3) {
        Assert.True(argument3 == 100m);
    }

    public static IEnumerable<object[]> DataSet1
        => new object[][]
        {
            new object[]
            {
                nameof(DataSet1), // added workaround
                new List<string>()
                {
                    "string 1",
    (...)

, а затем вижу имя набора данных в Вывод VS Test Explorer:

Result1 Name: (...) TestMethod(
      testName: "DataSet2", // now properly shows failed dataset name
      argument1: ["string 1", "string 2", "string 3", "string 4", "string 5"], argument2: ["string 1", "string 2", "string 3", "string 4", "string 5"], argument3: 200)
Result1 Outcome: Failed

Так есть ли простой способ увидеть имя набора данных MemberData в VS Test Explorer без обходного пути?

...