像 xUnit 这样的单元测试框架为数据驱动测试提供了方便的功能。然而,当被测方法的参数是复杂的数据结构时,例如自定义类的列表,InlineData 属性就显得不够了。
为了应对这一挑战, xUnit 提供了多种将复杂参数传递给理论驱动的单元测试的选项。其中一个选项是 MemberData 属性。
MemberData 属性使您能够指定返回 IEnumerable
[Theory, MemberData(nameof(MyCustomData))] public void WriteReportsToMemoryStream(...) { // ... } public static IEnumerable<object[]> MyCustomData() { // ... }
在 xUnit 2.0 之前,存在另一种替代方法:ClassData。与 MemberData 类似,ClassData 允许在不同类和命名空间中的测试之间共享数据生成器。例如:
public class MyCustomTests { [Theory, ClassData(typeof(MyCustomData))] public void WriteReportsToMemoryStream(...) { // ... } } public class MyCustomData : IEnumerable<object[]> { // ... }
xUnit 2.0 引入了 MemberData 的重载版本,可以直接使用其他类中的静态成员。上面的 ClassData 示例可以使用此重载进行重写:
[Theory, MemberData(nameof(MyCustomData.GetData), MemberType = typeof(MyCustomData))] public void WriteReportsToMemoryStream(...) { // ... }
这些示例说明了使用 MemberData、ClassData、以及它们各自的过载。通过利用这些属性,开发人员可以方便地生成数据,用于测试在复杂数据结构上运行的方法。
以上是如何在 xUnit 中将复杂参数传递给理论驱动的单元测试?的详细内容。更多信息请关注PHP中文网其他相关文章!