0

我正在尝试使用列值作为测试的名称,以便所有行在 Visual Studio 的“测试资源管理器”窗格中逐行显示。

以下是我使用 CSV 文件中的数据的测试。我尝试使用“TestName”属性并切片(“{15:16}”)我想用作测试名称的字符串部分的默认名称。我现在肯定做得正确,因为它只是给了我方法名称的名称。

第二种方法是我的读操作。此外,我不喜欢将我的数据分配给变量然后必须传递它们。我真的在寻找一种更优雅的方法来解决读取和使用 CSV 数据进行命名和测试的问题,所以如果有人有任何经验或想法,我很想听听他们的意见。

如果我遗漏了任何可以进一步阐明我的目标的信息,请告诉我。

class MegaTests
{
    [TestCase(TestName = "{15:16}")]
    [Test, TestCaseSource("GetTestData")]
    public void MyExample_Test(string TestName, string json, string ExpectedResult, string Environment, string ChannelMessage, string ChannelSubject, string MessageCenterMessage, string MessageCenterSubject)
    {
        Console.WriteLine(TestName + " " + json + " " + ExpectedResult + " " + Environment + " " + ChannelMessage + " " + ChannelSubject + " " + MessageCenterMessage + " " + MessageCenterSubject);

    }

private static IEnumerable<string[]> GetTestData()
    {
        //using (var csv = new CsvReader(new StreamReader(@"../../csv/data.csv"), true))
        using (var csv = new CsvReader(new StreamReader(@"DataDriveFromCSV/csv/data.csv"), true))
        {
            while (csv.ReadNextRecord())
            {
                string TestName = csv[0];
                string json = csv[1];
                string ExpectedResult = csv[2];
                string Environment = csv[3];
                string ChannelMessage = csv[4];
                string ChannelSubject = csv[5];
                string MessageCenterMessage = csv[6];
                string MessageCenterSubject = csv[7];

                yield return new[] { TestName, json, ExpectedResult, Environment, ChannelMessage, ChannelSubject, MessageCenterMessage, MessageCenterSubject };
            }
        }
    }
4

2 回答 2

1

[TestCase]并且[TestCaseSource]是为您的测试获取数据的替代正交方法。尽管您可以使用两者以两种不同的方式获取数据,但它们不会以任何方式合作。

如果您使用[TestCase(TestName="{15:16}")],您将创建一个没有参数且名称为“{15:16}”的测试。使用 TestCaseSource 是做你想做的事情的正确方法。

如果你仔细考虑,你会意识到你不能将测试的名称作为参数传递给测试。测试必须存在才能首先调用它,并且一旦存在,它就已经有了名称。

您应该返回一个 的实例,而不是返回一个参数数组TestCaseData,这将允许您传递参数以及设置测试的名称。

于 2018-03-09T22:49:42.933 回答
0

对于其他对此有任何疑问的人...

        {
        using (var csv = new CsvReader(new StreamReader("PATH TO YOUR CSV FILE"), false))

        {
            List<string> Lines = new List<string>();

            int counter = 0;
            while (csv.ReadNextRecord())
            {
                if (counter == 0)
                {
                    for (int i = 0; i < csv.FieldCount; i++)
                    {
                        Lines.Add(csv[i]);
                    }
                }
                else
                {
                    Dictionary<string, string> testData = new Dictionary<string, string>();

                    for (int i = 0; i < Lines.Count; i++)
                    {
                        testData.Add(Lines[i], csv[i]);
                    }
                    yield return new TestCaseData(testData).SetName(csv[0].ToString());
                }
                counter++;
            }
        }
    }
于 2018-03-24T19:45:27.757 回答