gpt4 book ai didi

c# - 如何使用 CSV 文件中的数据运行 XUnit 测试

转载 作者:行者123 更新时间:2023-11-30 15:58:42 28 4
gpt4 key购买 nike

有没有一种方法可以使用 CSV 文件作为数据源来运行数据驱动的 XUnit 测试?我试过 Cavity.Data.XUnit,但它不再与最新版本的 XUnit 兼容。到目前为止,我只能使用 Excel 文件实现此目的,但我需要将它们更改为 CSV

一个例子:

[Theory]
[ExcelData(@"Settings\TestFileParam.xls", "Select url, username, password, from TestData")]
//^Replace with a CSV file instead
public void Tester_Method(string url, string username, string password)
{
//Code reading the data from CSV
Assert.True(something);
}

最佳答案

您需要创建自定义 xUnit.Sdk.DataAttribute。这是一个将以这种形式读入数据的示例。

MyCsv.csv

sep=,
csvRowOne,csvRowTwo,csvRowThree
15,"Just A Test","Apples are Red"

然后你会这样调用它:

  [Theory]
[CsvData(@"C:\MyCsv.csv")]
public void TestWithCSVData(int csvRowOne, string csvRowTwo, string csvRowThree)

它只是解析字符串和整数,但您可以扩展 ConvertParameter 方法来执行更多操作。

CsvDataAttribute.cs

[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)]
public class CsvDataAttribute : DataAttribute
{
private readonly string _fileName;
public CsvDataAttribute(string fileName)
{
_fileName = fileName;
}

public override IEnumerable<object[]> GetData(MethodInfo testMethod)
{
var pars = testMethod.GetParameters();
var parameterTypes = pars.Select(par => par.ParameterType).ToArray();
using (var csvFile = new StreamReader(_fileName))
{
csvFile.ReadLine();// Delimiter Row: "sep=,". Comment out if not used
csvFile.ReadLine(); // Headings Row. Comment out if not used
string line;
while ((line = csvFile.ReadLine()) != null)
{
var row = line.Split(',');
yield return ConvertParameters((object[])row, parameterTypes);
}
}
}

private static object[] ConvertParameters(IReadOnlyList<object> values, IReadOnlyList<Type> parameterTypes)
{
var result = new object[parameterTypes.Count];
for (var idx = 0; idx < parameterTypes.Count; idx++)
{
result[idx] = ConvertParameter(values[idx], parameterTypes[idx]);
}

return result;
}

private static object ConvertParameter(object parameter, Type parameterType)
{
return parameterType == typeof(int) ? Convert.ToInt32(parameter) : parameter;
}
}

关于c# - 如何使用 CSV 文件中的数据运行 XUnit 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42727394/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com