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

如何將複雜參數傳遞給 xUnit 理論測試?

Susan Sarandon
Susan Sarandon原創
2025-01-04 10:28:35640瀏覽

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