xxxxData
XUnit में कई विशेषताएँ हैं । उदाहरण के लिए PropertyData
विशेषता देखें।
आप एक ऐसी संपत्ति लागू कर सकते हैं जो वापस आती है IEnumerable<object[]>
। प्रत्येक object[]
कि यह विधि उत्पन्न करता है तो आपकी [Theory]
विधि के लिए एक कॉल के लिए एक पैरामीटर के रूप में "अनपैक्ड" होगा ।
एक अन्य विकल्प है ClassData
, जो समान काम करता है, लेकिन विभिन्न वर्गों / नामस्थानों में परीक्षणों के बीच 'जनरेटर' को आसानी से साझा करने की अनुमति देता है, और वास्तविक परीक्षण विधियों से 'डेटा जनरेटर' को भी अलग करता है।
यहाँ से इन उदाहरणों को देखें :
प्रॉपर्टीडाटा उदाहरण
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(); }
}