问题描述
从下面了解到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'不包含'DaTarow'的定义且没有可访问的扩展方法'DaTarow'的错误。可以找到接受类型为'TestContext'的第一个参数(您是否缺少using指令或程序集引用?)”。
解决方法
2020年9月7日-没有解决方法
对此有一个未解决的问题issue-233,并且什么时候可以解决没有任何评论。有一些解决方法:
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