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

如何将复杂参数传递给 Xunit 的 [理论] 测试?

Susan Sarandon
Susan Sarandon原创
2024-12-30 05:59:09539浏览

How Can I Pass Complex Parameters to Xunit's [Theory] Tests?

将复杂参数传递给 [Theory]

使用属性将简单数据类型(例如字符串、整数和双精度数)作为参数传递给 Xunit 中的 [Theory] ​​测试非常简单像内联数据。然而,对于更复杂的参数,问题是如何提供此类数据。

MemberData 属性

XUnit 提供了 MemberData 属性,它允许您返回 IEnumerable 属性。财产。每个对象[]都将被解包到[Theory]方法的参数中。

例如:

public class StringTests
{
    [Theory, MemberData(nameof(SplitCountData))]
    public void SplitCount(string input, int expectedCount)
    {
        Assert.Equal(expectedCount, input.Split(' ').Length);
    }

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

ClassData Attribute

在Xunit 2.0之前,您可以使用 ClassData 属性在不同类的测试之间共享数据生成器。

对于例如:

public class StringTests
{
    [Theory, ClassData(typeof(IndexOfData))]
    public void IndexOf(string input, char letter, int expected)
    {
        Assert.Equal(expected, input.IndexOf(letter));
    }
}

public class IndexOfData : IEnumerable<object[]>
{
    // ... data and methods
}

静态成员的 MemberData 重载

在 Xunit 2.0 及更高版本中,MemberData 可以采用 MemberType 参数来指定另一个类的静态成员。

对于例如:

public class StringTests
{
    [Theory]
    [MemberData(nameof(IndexOfData.SplitCountData), MemberType = typeof(IndexOfData))]
    public void SplitCount(string input, int expectedCount)
    {
        Assert.Equal(expectedCount, input.Split(' ').Length);
    }
}

或者,如果您更喜欢数据生成器之间的分离,您仍然可以使用 ClassData以及测试方法。

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

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