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

如何將複雜參數傳遞給 XUnit 的 [理論] 方法?

DDD
DDD原創
2025-01-04 14:50:39283瀏覽

How Can I Pass Complex Parameters to XUnit's [Theory] Methods?

將複雜參數傳遞給[理論]

XUnit 提供了InlineData 屬性,使用戶能夠使用簡單的資料參數產生多個測試。但是,在處理更複雜的參數(例如自訂類別清單)時,需要採用不同的方法。

MemberData 和 ClassData 屬性

XUnit 提供了多種選項將複雜參數傳遞給 [Theory] ​​方法。一個方法是利用 MemberData 屬性。此屬性指示 XUnit 執行傳回 IEnumerable 的屬性。 IEnumerable 中的每個物件[] 都會被「解包」為對 [Theory] ​​方法的單次呼叫的參數。

另一個選項是使用 ClassData 屬性。 ClassData 的操作與 MemberData 類似,但允許在不同類別或命名空間中的測試之間共用資料產生器。它還將“數據生成器”與實際測試方法分開。

具有靜態成員支援的ClassData 範例

要使用具有靜態成員支援的ClassData,您可以定義一個具有傳回IEnumerable 的靜態屬性的類,如下所示:

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

中在您的測試類中,您可以應用[Theory] ​​屬性並使用該屬性的MemberType 屬性指定靜態成員:

[Theory, MemberData(nameof(IndexOfData.SplitCountData), MemberType = typeof(IndexOfData))]
public void IndexOf(string input, char letter, int expected) {...}

透過利用這些屬性,您可以將複雜的參數傳遞給您的[Theory]方法,使您能夠高效地測試各種場景。

以上是如何將複雜參數傳遞給 XUnit 的 [理論] 方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn