【问题标题】:What`s .Net core alternative of DataSource attribute for mstest?mstest 的 DataSource 属性的 .Net 核心替代方案是什么?
【发布时间】:2020-09-07 11:43:49
【问题描述】:

从下面了解到,MSTest 的 .net 核心项目不再支持 DataSource 属性。那么有什么替代方法呢?

链接: https://docs.microsoft.com/en-us/visualstudio/test/how-to-create-a-data-driven-unit-test?view=vs-2019

信息: .NET Core 不支持 DataSource 属性。如果您尝试在 .NET Core 或 UWP 单元测试项目中以这种方式访问​​测试数据,您将看到类似于“'TestContext' does not contain a definition for 'DataRow' and no access extension method 'DataRow'”的错误可以找到接受“TestContext”类型的第一个参数(您是否缺少 using 指令或程序集引用?)”。

【问题讨论】:

    标签: c# selenium-webdriver .net-core mstest


    【解决方案1】:

    2020 年 9 月 7 日 - 无解决方法

    关于这个问题有一个未解决的问题issue-233,并且没有关于何时可以修复它的 cmets。有一些解决方法:

    DynamicDateAttribute(CSV 示例)

    private static string[] SplitCsv(string input)
    {
        var csvSplit = new Regex("(?:^|,)(\"(?:[^\"]+|\"\")*\"|[^,]*)", RegexOptions.Compiled);
        var list = new List<string>();
        foreach (Match match in csvSplit.Matches(input))
        {
            string value = match.Value;
            if (value.Length == 0)
            {
                list.Add(string.Empty);
            }
    
            list.Add(value.TrimStart(','));
        }
        return list.ToArray();
    }
    
    private static IEnumerable<string[]> GetData()
    {
        IEnumerable<string> rows = System.IO.File.ReadAllLines(@"Resources\NameAddressCityStateZip.csv").Skip(1);
        foreach (string row in rows)
        {
            yield return SplitCsv(row);
        }
    }
    
    [TestMethod]
    [DynamicData(nameof(GetData), DynamicDataSourceType.Method)]
    //x [DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV", @"Resources\NameAddressCityStateZip.csv", "NameAddressCityStateZip#csv", DataAccessMethod.Sequential)]
    public void TestMethod1(string input, string expected)
    {
        // Arrange
        //x string input = _testContext.Properties["Data"].ToString(); //x _testContext.DataRow["Data"].ToString();
        //x string expected = _testContext.Properties["Expected"].ToString(); //x _testContext.DataRow["Expected"].ToString();
        var parser = _serviceProvider.GetService<Parser>();
    
        // Act
        string actual = parser.MultiParser(input, ModeType.NameAddressCityStateZipCountry).ToString();
    
        // Assert
        Assert.AreEqual(expected, actual);
    }
    

    但它也有缺点。

    自己移植代码

    如评论here中所示

    等待实施

    【讨论】:

    • @Kataras - 谢谢!我需要读取 xml 数据文件,有没有办法可以编写一个特殊的类并将其用作我的测试方法(MS test2)的属性?如果是的话,你能启发我吗?
    猜你喜欢
    • 1970-01-01
    • 2017-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多