【发布时间】:2020-07-29 06:21:56
【问题描述】:
我正在为我的应用程序编写单元测试。现在我正在使用 Theory 和 ClassData 来创建数据驱动的单元测试。 我想知道 ClassData 是否能够接受参数,以便我可以根据测试的输入更改测试数据?
下面是一些示例代码:
这是我的数据类:
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 Data 接受一个参数,以便我可以根据 Group ABCD 更改测试数据,因为在我的测试数据 json 文件中,该组中的每一个都是测试数据列表。但是,我的设置似乎不可能,因为该行的测试中显示错误[ClassData(typeof(InvalidMessageFrame("A")))],错误是:) expected。
如果这不起作用,我想知道是否有其他方法可以达到相同的结果?
谢谢。
【问题讨论】: