Bunun başka bir geç cevap olduğunu biliyorum, ancak MS Test çerçevesini kullanmaya kilitlenen ekibimde, bir dizi test verisini tutmak için yalnızca Anonim Türlere ve her satırda döngü yapmak ve test etmek için LINQ'ya dayanan bir teknik geliştirdik. Ek sınıf veya çerçeve gerektirmez ve okunması ve anlaşılması oldukça kolay olma eğilimindedir. Ayrıca, harici dosyalar veya bağlı bir veritabanı kullanan veriye dayalı testlerden çok daha kolaydır.
Örneğin, şöyle bir uzantı yönteminiz olduğunu varsayalım:
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 ile birleştirilmiş Anonim Türleri aşağıdaki gibi bir test yazmak için kullanabilirsiniz:
[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);
});
}
}
Bu tekniği kullanırken, hangi satırın testin başarısız olmasına neden olduğunu belirlemenize yardımcı olmak için Assert'teki giriş verilerini içeren biçimlendirilmiş bir mesaj kullanmak yararlıdır.
Bu çözüm hakkında daha fazla arka plan ve ayrıntıyla AgileCoder.net'te blog yazdım .