使用来自外部文件的数据进行 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 样本: