xUnit 测试中的 ClassData 是否接受参数? C#
Does ClassData in xUnit Test accept arguments? C#
我正在为我的应用程序编写单元测试。现在我正在使用 Theory with ClassData 来创建数据驱动的单元测试。
我想知道 ClassData 是否能够接受参数,以便我可以根据测试的输入更改测试数据?
下面是一些示例代码:
这是我的数据class:
public class InvalidMessageFrame : TheoryData<string, string, string>
{
public InvalidMessageFrame(string messageType)
{
var testData = ReadFromJson(handlerType);
foreach (var data in testData ?? Enumerable.Empty<InvalidMessageTestModel>())
{
Add(data.description, data.message, data.exception);
}
}
private IEnumerable<InvalidMessageTestModel> ReadFromJson(string messageType)
{
var messageObjectName = messageType switch
{
"A" => "Group A",
"B" => "Group B",
"C" => "Group C",
"D" => "Group D",
_ => throw new ArgumentOutOfRangeException(nameof(messageType), messageType, null)
};
var filePath = Path.Combine(Environment.CurrentDirectory, "../../../TestData/InvalidTestData.json");
var json = File.ReadAllText(filePath);
var jObject = JObject.Parse(json);
var testData = jObject[messageObjectName]?.ToObject<IEnumerable<InvalidMessageTestModel>>();
return testData;
}
}
这是我的测试:
[Theory]
[ClassData(typeof(InvalidMessageFrame("A")))]
public void InvalidTest(string description, string message, string exception)
{
}
如您所见,我试图让 Class 数据接受一个参数,以便我可以根据组 ABCD 更改测试数据,因为在我的测试数据 json 文件中,每个组是测试数据的列表。但是,我的设置似乎不可能,因为此行 [ClassData(typeof(InvalidMessageFrame("A")))]
的测试中显示错误,错误是:) expected
.
所以如果这不起作用,我想知道是否有其他方法可以达到相同的结果?
谢谢。
使用 typeof 你只能得到 typeof class 而不是调用构造函数所以你只能写
[ClassData(typeof(InvalidMessageFrame))]
我正在为我的应用程序编写单元测试。现在我正在使用 Theory with ClassData 来创建数据驱动的单元测试。 我想知道 ClassData 是否能够接受参数,以便我可以根据测试的输入更改测试数据?
下面是一些示例代码:
这是我的数据class:
public class InvalidMessageFrame : TheoryData<string, string, string>
{
public InvalidMessageFrame(string messageType)
{
var testData = ReadFromJson(handlerType);
foreach (var data in testData ?? Enumerable.Empty<InvalidMessageTestModel>())
{
Add(data.description, data.message, data.exception);
}
}
private IEnumerable<InvalidMessageTestModel> ReadFromJson(string messageType)
{
var messageObjectName = messageType switch
{
"A" => "Group A",
"B" => "Group B",
"C" => "Group C",
"D" => "Group D",
_ => throw new ArgumentOutOfRangeException(nameof(messageType), messageType, null)
};
var filePath = Path.Combine(Environment.CurrentDirectory, "../../../TestData/InvalidTestData.json");
var json = File.ReadAllText(filePath);
var jObject = JObject.Parse(json);
var testData = jObject[messageObjectName]?.ToObject<IEnumerable<InvalidMessageTestModel>>();
return testData;
}
}
这是我的测试:
[Theory]
[ClassData(typeof(InvalidMessageFrame("A")))]
public void InvalidTest(string description, string message, string exception)
{
}
如您所见,我试图让 Class 数据接受一个参数,以便我可以根据组 ABCD 更改测试数据,因为在我的测试数据 json 文件中,每个组是测试数据的列表。但是,我的设置似乎不可能,因为此行 [ClassData(typeof(InvalidMessageFrame("A")))]
的测试中显示错误,错误是:) expected
.
所以如果这不起作用,我想知道是否有其他方法可以达到相同的结果?
谢谢。
使用 typeof 你只能得到 typeof class 而不是调用构造函数所以你只能写
[ClassData(typeof(InvalidMessageFrame))]