Tôi biết đây là một câu trả lời muộn khác, nhưng trong nhóm của tôi, những người bị khóa trong việc sử dụng khung MS Test, chúng tôi đã phát triển một kỹ thuật chỉ dựa vào Loại ẩn danh để lưu giữ một mảng dữ liệu thử nghiệm và LINQ để lặp lại và kiểm tra từng hàng. Nó không yêu cầu các lớp hoặc khuôn khổ bổ sung và có xu hướng khá dễ đọc và dễ hiểu. Nó cũng dễ thực hiện hơn nhiều so với các bài kiểm tra theo hướng dữ liệu bằng cách sử dụng các tệp bên ngoài hoặc cơ sở dữ liệu được kết nối.
Ví dụ: giả sử bạn có một phương thức mở rộng như thế này:
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);
}
}
Bạn có thể sử dụng và kết hợp mảng các Loại Ẩn danh với LINQ để viết các bài kiểm tra như sau:
[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);
});
}
}
Khi sử dụng kỹ thuật này, sẽ hữu ích khi sử dụng một thông báo được định dạng bao gồm dữ liệu đầu vào trong Assert để giúp bạn xác định hàng nào khiến thử nghiệm không thành công.
Tôi đã viết blog về giải pháp này với nhiều thông tin cơ bản và chi tiết hơn tại AgileCoder.net .