Saya tahu ini adalah jawaban lain yang terlambat, tetapi di tim saya yang terkunci dalam menggunakan kerangka kerja MS Test, kami mengembangkan teknik yang hanya mengandalkan Jenis Anonim untuk menyimpan berbagai data pengujian, dan LINQ untuk mengulang dan menguji setiap baris. Ini tidak memerlukan kelas atau kerangka kerja tambahan, dan cenderung cukup mudah dibaca dan dipahami. Ini juga jauh lebih mudah untuk diterapkan daripada pengujian berbasis data menggunakan file eksternal atau database yang terhubung.
Misalnya, Anda memiliki metode ekstensi seperti ini:
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);
}
}
Anda bisa menggunakan dan array Anonymous Type yang digabungkan ke LINQ untuk menulis tes seperti ini:
[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);
});
}
}
Saat menggunakan teknik ini, sebaiknya gunakan pesan yang diformat yang menyertakan data input di Assert untuk membantu Anda mengidentifikasi baris mana yang menyebabkan pengujian gagal.
Saya telah membuat blog tentang solusi ini dengan latar belakang dan detail lebih lanjut di AgileCoder.net .