使用屬性將簡單資料類型(例如字串、整數和雙精度數)作為參數傳遞給Xunit 中的[Theory] 測試非常簡單像內聯資料。然而,對於更複雜的參數,問題是如何提供此類數據。
XUnit 提供了 MemberData 屬性,它允許您傳回 IEnumerable
例如:
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 } }; }
在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 }
在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中文網其他相關文章!