首页 >后端开发 >C++ >如何将复杂参数传递给 XUnit 的 [理论] 方法?

如何将复杂参数传递给 XUnit 的 [理论] 方法?

DDD
DDD原创
2025-01-04 14:50:39284浏览

How Can I Pass Complex Parameters to XUnit's [Theory] Methods?

将复杂参数传递给[理论]

XUnit 提供了 InlineData 属性,使用户能够使用简单的数据参数生成多个测试。但是,在处理更复杂的参数(例如自定义类列表)时,需要采用不同的方法。

MemberData 和 ClassData 属性

XUnit 提供了多种选项将复杂参数传递给 [Theory] ​​方法。一种方法是利用 MemberData 属性。该属性指示 XUnit 执行返回 IEnumerable 的属性。 IEnumerable 中的每个对象[] 都将被“解包”为对 [Theory] ​​方法的单次调用的参数。

另一个选项是使用 ClassData 属性。 ClassData 的操作与 MemberData 类似,但允许在不同类或命名空间中的测试之间共享数据生成器。它还将“数据生成器”与实际测试方法分开。

具有静态成员支持的 ClassData 示例

要使用具有静态成员支持的 ClassData,您可以定义一个具有返回 IEnumerable 的静态属性的类,如下所示:

public class IndexOfData
{
    public static IEnumerable<object[]> SplitCountData => 
        new List<object[]>
        {
            new object[] { "hello world", 'w', 6 },
            new object[] { "goodnight moon", 'w', -1 }
        };
}

中在您的测试类中,您可以应用 [Theory] ​​属性并使用该属性的 MemberType 属性指定静态成员:

[Theory, MemberData(nameof(IndexOfData.SplitCountData), MemberType = typeof(IndexOfData))]
public void IndexOf(string input, char letter, int expected) {...}

通过利用这些属性,您可以将复杂的参数传递给您的 [Theory]方法,使您能够高效地测试各种场景。

以上是如何将复杂参数传递给 XUnit 的 [理论] 方法?的详细内容。更多信息请关注PHP中文网其他相关文章!

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