有許多XUnit中的xxxxData
屬性。請查看例如PropertyData
屬性。
您可以實施返回IEnumerable<object[]>
的財產。此方法生成的object[]
中的每一個都將被「解包」,作爲對您的[Theory]
方法的單個調用的參數。
另一種選擇是ClassData
,它的工作原理是相同的,但它允許在不同的類/名稱空間中的測試之間輕鬆共享「生成器」,並將「數據生成器」與實際測試方法分開。
見即these examples from here:
PropertyData例
public class StringTests2
{
[Theory, PropertyData(nameof(SplitCountData))]
public void SplitCount(string input, int expectedCount)
{
var actualCount = input.Split(' ').Count();
Assert.Equal(expectedCount, actualCount);
}
public static IEnumerable<object[]> SplitCountData
{
get
{
// Or this could read from a file. :)
return new[]
{
new object[] { "xUnit", 1 },
new object[] { "is fun", 2 },
new object[] { "to test with", 3 }
};
}
}
}
ClassData例
public class StringTests3
{
[Theory, ClassData(typeof(IndexOfData))]
public void IndexOf(string input, char letter, int expected)
{
var actual = input.IndexOf(letter);
Assert.Equal(expected, actual);
}
}
public class IndexOfData : IEnumerable<object[]>
{
private readonly List<object[]> _data = new List<object[]>
{
new object[] { "hello world", 'w', 6 },
new object[] { "goodnight moon", 'w', -1 }
};
public IEnumerator<object[]> GetEnumerator()
{ return _data.GetEnumerator(); }
IEnumerator IEnumerable.GetEnumerator()
{ return GetEnumerator(); }
}
如果它在你的環境中是有意義的,你可以在F#中做到這一點,噪音少得多: - http://stackoverflow.com/a/35127997/11635 –