这些天来,我试图了解xUnit测试的工作原理,特别是,我发现有3种方法可以将数据作为参数传递,以测试类方法(InlineData,ClassData和MemberData)。但是,这是我的问题:是否有机会从外部文件获取这些数据? (例如,Json文件) 感谢您的关注,我无法找到足够有关该主题的资料!
答案 0 :(得分:4)
xUnit被设计为可扩展的,即通过DataAttribute。
InlineData,ClassData和MemberData都源自DataAttribute
,您可以扩展它们来创建用于数据理论的自定义数据源,您可以在其中阅读从您的外部文件并使用例如Json.NET来反序列化您的数据。
用户Sock在他的博客中有关 JSON 的内容是这样的:
与来自 CSV 文件的数据有关的问题: How to run XUnit test using data from a CSV file
这是两个 xUnit 示例:
答案 1 :(得分:3)
我相信最干净的方法是使用ClassData
,以便您可以随时随地填充测试数据。考虑一下:
public class TestData : IEnumerable<object[]>
{
private IEnumerable<object[]> ReadFile()
{
//read your file
}
public IEnumerator<object[]> GetEnumerator()
{
var items = ReadFile();
return items.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
}
当然,您可以在the Arrange phase of your test期间填充文件中的数据,然后在数据上循环测试方法。但是在那种情况下,您将失去检测所有失败的测试的优势,而不仅仅是第一个。