首页 >后端开发 >C++ >如何将复杂参数传递给 xUnit 理论测试?

如何将复杂参数传递给 xUnit 理论测试?

Susan Sarandon
Susan Sarandon原创
2025-01-04 10:28:35620浏览

How Can I Pass Complex Parameters to xUnit Theory Tests?

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

在 Xunit 中,InlineData 属性使您能够为提供的每组数据创建单独的测试。但是,如果您的方法采用复杂的参数(例如自定义对象列表)怎么办?

为了处理这种情况,XUnit 提供了 MemberData 属性。通过定义返回 IEnumerable 的属性,您可以生成一个对象数组,该数组将被解包并作为单独的参数传递给您的 Theory 方法。下面是一个示例:

MemberData 示例:

public class StringTests2
{
    [Theory, MemberData(nameof(SplitCountData))]
    public void SplitCount(string input, int expectedCount)
    {
        var actualCount = input.Split(' ').Count();
        Assert.Equal(expectedCount, actualCount);
    }

    public static IEnumerable<object[]> SplitCountData =>
        new List<object[]>
        {
            new object[] { "xUnit", 1 },
            new object[] { "is fun", 2 },
            new object[] { "to test with", 3 }
        };
}

在 XUnit 2.0 或更高版本中,您可以在返回 IEnumerable。以下示例演示了这一点:

重载成员数据示例:

public class StringTests3
{
    [Theory, MemberData(nameof(IndexOfData.SplitCountData), MemberType = typeof(IndexOfData))]
    public void IndexOf(string input, char letter, int expected)
    {
        var actual = input.IndexOf(letter);
        Assert.Equal(expected, actual);
    }
}

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

通过利用这些技术,您可以有效地将复杂参数传递给理论测试。

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

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