将复杂参数传递给[理论]
在 Xunit 中,InlineData 属性使您能够为提供的每组数据创建单独的测试。但是,如果您的方法采用复杂的参数(例如自定义对象列表)怎么办?
为了处理这种情况,XUnit 提供了 MemberData 属性。通过定义返回 IEnumerable
MemberData 示例:
public class StringTests2 { [Theory, MemberData(nameof(SplitCountData))] public void SplitCount(string input, int expectedCount) { var actualCount = input.Split(' ').Count(); Assert.Equal(expectedCount, actualCount); } public static IEnumerable<object[]> SplitCountData => new List<object[]> { new object[] { "xUnit", 1 }, new object[] { "is fun", 2 }, new object[] { "to test with", 3 } }; }
在 XUnit 2.0 或更高版本中,您可以在返回 IEnumerable。以下示例演示了这一点:
重载成员数据示例:
public class StringTests3 { [Theory, MemberData(nameof(IndexOfData.SplitCountData), MemberType = typeof(IndexOfData))] public void IndexOf(string input, char letter, int expected) { var actual = input.IndexOf(letter); Assert.Equal(expected, actual); } } public class IndexOfData { public static IEnumerable<object[]> SplitCountData => new List<object[]> { new object[] { "hello world", 'w', 6 }, new object[] { "goodnight moon", 'w', -1 } }; }
通过利用这些技术,您可以有效地将复杂参数传递给理论测试。
以上是如何将复杂参数传递给 xUnit 理论测试?的详细内容。更多信息请关注PHP中文网其他相关文章!