使用属性将简单数据类型(例如字符串、整数和双精度数)作为参数传递给 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中文网其他相关文章!