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

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

Susan Sarandon
发布: 2024-12-30 05:59:09
原创
534 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板