首頁 >後端開發 >C++ >如何在 xUnit 中將複雜參數傳遞給理論驅動的單元測試?

如何在 xUnit 中將複雜參數傳遞給理論驅動的單元測試?

Barbara Streisand
Barbara Streisand原創
2025-01-02 21:24:41988瀏覽

How to Pass Complex Parameters to Theory-Driven Unit Tests in xUnit?

將複雜參數傳遞給理論驅動的單元測試

像 xUnit 這樣的單元測試框架為數據驅動測試提供了方便的功能。然而,當被測方法的參數是複雜的資料結構時,例如自訂類別的列表,InlineData 屬性就顯得不夠了。

複雜參數理論

為了應對這一挑戰, xUnit 提供了多種將複雜參數傳遞給理論驅動的單元測試的選項。其中一個選項是 MemberData 屬性。

MemberData 來救援

MemberData 屬性可讓您指定傳回 IEnumerable 的屬性或方法。此序列中的每個物件陣列代表每個測試實例的參數。例如:

[Theory, MemberData(nameof(MyCustomData))]
public void WriteReportsToMemoryStream(...)
{
    // ...
}

public static IEnumerable<object[]> MyCustomData()
{
    // ...
}

ClassData:一種替代方法

在 xUnit 2.0 之前,存在另一種替代方法:ClassData。與 MemberData 類似,ClassData 允許在不同類別和命名空間中的測試之間共用資料產生器。例如:

public class MyCustomTests
{
    [Theory, ClassData(typeof(MyCustomData))]
    public void WriteReportsToMemoryStream(...)
    {
        // ...
    }
}

public class MyCustomData : IEnumerable<object[]>
{
    // ...
}

具有靜態成員重載的 MemberData (xUnit >= 2.0)

xUnit 2.0 引入了 MemberData 的重載版本,可以直接使用其他類別中的靜態成員。上面的 ClassData 範例可以使用此重載進行重寫:

[Theory, MemberData(nameof(MyCustomData.GetData), MemberType = typeof(MyCustomData))]
public void WriteReportsToMemoryStream(...)
{
    // ...
}

結論

這些範例說明了使用 MemberData、ClassData、以及它們各自的過載。透過利用這些屬性,開發人員可以方便地產生數據,用於測試在複雜數據結構上運行的方法。

以上是如何在 xUnit 中將複雜參數傳遞給理論驅動的單元測試?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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