首页 >后端开发 >C++ >如何在 xUnit 中将复杂参数传递给理论驱动的单元测试?

如何在 xUnit 中将复杂参数传递给理论驱动的单元测试?

Barbara Streisand
Barbara Streisand原创
2025-01-02 21:24:41988浏览

How to Pass Complex Parameters to Theory-Driven Unit Tests in xUnit?

将复杂参数传递给理论驱动的单元测试

像 xUnit 这样的单元测试框架为数据驱动测试提供了方便的功能。然而,当被测方法的参数是复杂的数据结构时,例如自定义类的列表,InlineData 属性就显得不够了。

复杂参数理论

为了应对这一挑战, xUnit 提供了多种将复杂参数传递给理论驱动的单元测试的选项。其中一个选项是 MemberData 属性。

MemberData 来救援

MemberData 属性使您能够指定返回 IEnumerable 的属性或方法。此序列中的每个对象数组代表每个测试实例的参数。例如:

[Theory, MemberData(nameof(MyCustomData))]
public void WriteReportsToMemoryStream(...)
{
    // ...
}

public static IEnumerable<object[]> MyCustomData()
{
    // ...
}

ClassData:一种替代方法

在 xUnit 2.0 之前,存在另一种替代方法:ClassData。与 MemberData 类似,ClassData 允许在不同类和命名空间中的测试之间共享数据生成器。例如:

public class MyCustomTests
{
    [Theory, ClassData(typeof(MyCustomData))]
    public void WriteReportsToMemoryStream(...)
    {
        // ...
    }
}

public class MyCustomData : IEnumerable<object[]>
{
    // ...
}

具有静态成员重载的 MemberData (xUnit >= 2.0)

xUnit 2.0 引入了 MemberData 的重载版本,可以直接使用其他类中的静态成员。上面的 ClassData 示例可以使用此重载进行重写:

[Theory, MemberData(nameof(MyCustomData.GetData), MemberType = typeof(MyCustomData))]
public void WriteReportsToMemoryStream(...)
{
    // ...
}

结论

这些示例说明了使用 MemberData、ClassData、以及它们各自的过载。通过利用这些属性,开发人员可以方便地生成数据,用于测试在复杂数据结构上运行的方法。

以上是如何在 xUnit 中将复杂参数传递给理论驱动的单元测试?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn