मुझे पता है कि यह एक और देर से जवाब है, लेकिन मेरी टीम पर जो एमएस टेस्ट फ्रेमवर्क का उपयोग करने में बंद है, हमने एक ऐसी तकनीक विकसित की जो केवल एक प्रकार का परीक्षण डेटा रखने के लिए बेनामी प्रकारों पर निर्भर करती है, और प्रत्येक पंक्ति के माध्यम से लूप और परीक्षण करने के लिए LINQ। इसके लिए किसी अतिरिक्त कक्षा या ढांचे की आवश्यकता नहीं है, और पढ़ने और समझने में यह काफी आसान है। बाहरी फ़ाइलों या कनेक्टेड डेटाबेस का उपयोग करके डेटा-संचालित परीक्षणों की तुलना में इसे लागू करना बहुत आसान है।
उदाहरण के लिए, मान लें कि आपके पास इस तरह की एक एक्सटेंशन विधि है:
public static class Extensions
{
/// <summary>
/// Get the Qtr with optional offset to add or subtract quarters
/// </summary>
public static int GetQuarterNumber(this DateTime parmDate, int offset = 0)
{
return (int)Math.Ceiling(parmDate.AddMonths(offset * 3).Month / 3m);
}
}
आप इस तरह के परीक्षण लिखने के लिए LINQ के साथ संयुक्त बेनामी प्रकारों का उपयोग और सरणी कर सकते हैं:
[TestMethod]
public void MonthReturnsProperQuarterWithOffset()
{
// Arrange
var values = new[] {
new { inputDate = new DateTime(2013, 1, 1), offset = 1, expectedQuarter = 2},
new { inputDate = new DateTime(2013, 1, 1), offset = -1, expectedQuarter = 4},
new { inputDate = new DateTime(2013, 4, 1), offset = 1, expectedQuarter = 3},
new { inputDate = new DateTime(2013, 4, 1), offset = -1, expectedQuarter = 1},
new { inputDate = new DateTime(2013, 7, 1), offset = 1, expectedQuarter = 4},
new { inputDate = new DateTime(2013, 7, 1), offset = -1, expectedQuarter = 2},
new { inputDate = new DateTime(2013, 10, 1), offset = 1, expectedQuarter = 1},
new { inputDate = new DateTime(2013, 10, 1), offset = -1, expectedQuarter = 3}
// Could add as many rows as you want, or extract to a private method that
// builds the array of data
};
values.ToList().ForEach(val =>
{
// Act
int actualQuarter = val.inputDate.GetQuarterNumber(val.offset);
// Assert
Assert.AreEqual(val.expectedQuarter, actualQuarter,
"Failed for inputDate={0}, offset={1} and expectedQuarter={2}.", val.inputDate, val.offset, val.expectedQuarter);
});
}
}
इस तकनीक का उपयोग करते समय यह एक स्वरूपित संदेश का उपयोग करने में मददगार होता है जिसमें एसेट में इनपुट डेटा शामिल होता है जिससे आपको यह पहचानने में मदद मिलती है कि कौन सी पंक्ति परीक्षण को विफल करती है।
मैंने AgileCoder.net पर अधिक पृष्ठभूमि और विस्तार के साथ इस समाधान के बारे में ब्लॉग किया है ।