像 xUnit 這樣的單元測試框架為數據驅動測試提供了方便的功能。然而,當被測方法的參數是複雜的資料結構時,例如自訂類別的列表,InlineData 屬性就顯得不夠了。
為了應對這一挑戰, xUnit 提供了多種將複雜參數傳遞給理論驅動的單元測試的選項。其中一個選項是 MemberData 屬性。
MemberData 屬性可讓您指定傳回 IEnumerable
[Theory, MemberData(nameof(MyCustomData))] public void WriteReportsToMemoryStream(...) { // ... } public static IEnumerable<object[]> MyCustomData() { // ... }
在 xUnit 2.0 之前,存在另一種替代方法:ClassData。與 MemberData 類似,ClassData 允許在不同類別和命名空間中的測試之間共用資料產生器。例如:
public class MyCustomTests { [Theory, ClassData(typeof(MyCustomData))] public void WriteReportsToMemoryStream(...) { // ... } } public class MyCustomData : IEnumerable<object[]> { // ... }
xUnit 2.0 引入了 MemberData 的重載版本,可以直接使用其他類別中的靜態成員。上面的 ClassData 範例可以使用此重載進行重寫:
[Theory, MemberData(nameof(MyCustomData.GetData), MemberType = typeof(MyCustomData))] public void WriteReportsToMemoryStream(...) { // ... }
這些範例說明了使用 MemberData、ClassData、以及它們各自的過載。透過利用這些屬性,開發人員可以方便地產生數據,用於測試在複雜數據結構上運行的方法。
以上是如何在 xUnit 中將複雜參數傳遞給理論驅動的單元測試?的詳細內容。更多資訊請關注PHP中文網其他相關文章!