首頁 > 後端開發 > C++ > 如何將複雜參數傳遞給 Xunit 的 [理論] 測試?

如何將複雜參數傳遞給 Xunit 的 [理論] 測試?

Susan Sarandon
發布: 2024-12-30 05:59:09
原創
532 人瀏覽過

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
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板