Gio*_*rto 2 c# xunit xunit.net
这些天来,我试图了解xUnit测试的工作原理,尤其是,我发现有3种方法可以将数据作为参数传递,以测试类方法(InlineData,ClassData和MemberData)。但是,这是我的问题:是否有机会从外部文件获取这些数据?(例如,一个Json文件),我无法找到有关该主题的足够材料,谢谢您的关注!
我相信最干净的方法是使用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();
}
Run Code Online (Sandbox Code Playgroud)
当然,您可以在测试的排列阶段从文件中填充数据,然后在数据上循环测试方法。但在这种情况下,您将失去检测所有失败测试而不仅仅是第一个的优势。
通过DataAttribute可以将xUnit设计为可扩展的。
InlineData,ClassData和MemberData都从派生DataAttribute,您可以扩展自己以创建一个数据理论的自定义数据源,您可以在其中读取外部文件并使用例如Json.NET来反序列化数据。
正如您提到的那样,用户Sock在其有关JSON的博客中写道:
CSV文件中的数据的相关问题: 如何使用CSV文件中的数据运行XUnit测试
这是两个xUnit示例: