使用来自外部文件的数据进行xUnit测试

时间:2019-04-30 14:38:17

标签: c# xunit xunit.net

这些天来,我试图了解xUnit测试的工作原理,特别是,我发现有3种方法可以将数据作为参数传递,以测试类方法(InlineData,ClassData和MemberData)。但是,这是我的问题:是否有机会从外部文件获取这些数据? (例如,Json文件) 感谢您的关注,我无法找到足够有关该主题的资料!

2 个答案:

答案 0 :(得分:4)

xUnit被设计为可扩展的,即通过DataAttribute

InlineDataClassDataMemberData都源自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期间填充文件中的数据,然后在数据上循环测试方法。但是在那种情况下,您将失去检测所有失败的测试的优势,而不仅仅是第一个。