使用来自外部文件的数据进行 xUnit 测试
xUnit test using data coming from external file
这些天我试图了解 xUnit 测试的工作原理,特别是,我发现有 3 种方法可以将数据作为参数传递以测试 class 方法(InlineData、ClassData 和会员数据)。但这是我的问题:是否有机会从外部文件中获取这些数据? (例如 Json 文件)
关于这个主题,我找不到足够的 material,感谢您的关注!
我认为最简洁的方法是使用 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 期间从文件中填充数据,然后在数据上循环测试方法。但在那种情况下,您将失去检测所有失败测试而不仅仅是第一个失败测试的优势。
xUnit 被设计为可扩展的,i.a。通过 DataAttribute.
InlineData, ClassData and MemberData all derive from DataAttribute
, which you can extend yourself to create a custom data source for a data theory, in which you may read from you external file and use e.g. Json.NET 反序列化您的数据。
用户 Sock 在他关于 JSON 的博客中写了这篇文章,正如您提到的:
与来自 CSV 文件的数据相关的问题:
How to run XUnit test using data from a CSV file
这里有两个 xUnit 样本:
这些天我试图了解 xUnit 测试的工作原理,特别是,我发现有 3 种方法可以将数据作为参数传递以测试 class 方法(InlineData、ClassData 和会员数据)。但这是我的问题:是否有机会从外部文件中获取这些数据? (例如 Json 文件) 关于这个主题,我找不到足够的 material,感谢您的关注!
我认为最简洁的方法是使用 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 期间从文件中填充数据,然后在数据上循环测试方法。但在那种情况下,您将失去检测所有失败测试而不仅仅是第一个失败测试的优势。
xUnit 被设计为可扩展的,i.a。通过 DataAttribute.
InlineData, ClassData and MemberData all derive from DataAttribute
, which you can extend yourself to create a custom data source for a data theory, in which you may read from you external file and use e.g. Json.NET 反序列化您的数据。
用户 Sock 在他关于 JSON 的博客中写了这篇文章,正如您提到的:
与来自 CSV 文件的数据相关的问题: How to run XUnit test using data from a CSV file
这里有两个 xUnit 样本: