Phát triển theo hướng kiểm tra nghĩa là bạn ngừng viết mã khi tất cả các thử nghiệm của bạn vượt qua.
Nếu bạn không có thử nghiệm cho một thuộc tính, thì tại sao bạn nên triển khai nó? Nếu bạn không kiểm tra / xác định hành vi mong đợi trong trường hợp được chuyển nhượng "bất hợp pháp", tài sản phải làm gì?
Vì vậy, tôi hoàn toàn để kiểm tra mọi hành vi mà một lớp nên thể hiện. Bao gồm các thuộc tính "nguyên thủy".
Để làm cho việc kiểm tra này dễ dàng hơn, tôi đã tạo một NUnit đơn giản TestFixture
cung cấp các điểm mở rộng để thiết lập / nhận giá trị và lấy danh sách các giá trị hợp lệ và không hợp lệ, đồng thời có một bài kiểm tra duy nhất để kiểm tra xem thuộc tính có hoạt động đúng hay không. Kiểm tra một thuộc tính có thể trông giống như sau:
[TestFixture]
public class Test_MyObject_SomeProperty : PropertyTest<int>
{
private MyObject obj = null;
public override void SetUp() { obj = new MyObject(); }
public override void TearDown() { obj = null; }
public override int Get() { return obj.SomeProperty; }
public override Set(int value) { obj.SomeProperty = value; }
public override IEnumerable<int> SomeValidValues() { return new List() { 1,3,5,7 }; }
public override IEnumerable<int> SomeInvalidValues() { return new List() { 2,4,6 }; }
}
Sử dụng lambdas và các thuộc tính, điều này thậm chí có thể được viết gọn gàng hơn. Tôi thu thập MBUnit thậm chí có một số hỗ trợ bản địa cho những thứ như vậy. Tuy nhiên, vấn đề là đoạn mã trên nắm bắt được mục đích của thuộc tính.
Tái bút: Có lẽ PropertyTest cũng nên có một cách để kiểm tra xem các thuộc tính khác trên đối tượng không thay đổi. Hmm .. quay lại bảng vẽ.