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

Gio*_*rto 2 c# xunit xunit.net

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

Boh*_*pak 5

我相信最干净的方法是使用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)

当然,您可以在测试的排列阶段从文件中填充数据,然后在数据上循环测试方法。但在这种情况下,您将失去检测所有失败测试而不仅仅是第一个的优势。


Fla*_*ver 5

通过DataAttribute可以将xUnit设计为可扩展的。

InlineDataClassDataMemberData都从派生DataAttribute,您可以扩展自己以创建一个数据理论的自定义数据源,您可以在其中读取外部文件并使用例如Json.NET来反序列化数据。

正如您提到的那样,用户Sock在其有关JSON的博客中写道:

CSV文件中的数据的相关问题: 如何使用CSV文件中的数据运行XUnit测试

这是两个xUnit示例:

  • 谢谢,这篇文章确实有帮助 https://andrewlock.net/creating-a-custom-xunit-theory-test-dataattribute-to-load-data-from-json-files/ 但是,我必须每次都重建我的测试项目我修改 JSON 文件的时间。即使在文件上设置了“始终复制”,简单构建也不会更新文件 (2认同)