Tôi đang viết Bài kiểm tra đơn vị và suy nghĩ về kịch bản của loại thực hiện IClonable
. Vì vậy, tất nhiên tôi muốn có một bài kiểm tra đơn vị kiểm tra phương pháp Clone()
.Bài kiểm tra đơn vị: Clone và equality
[Test]
public void CloneObject()
{
MyType original = new MyType();
MyType clone = (MyType)original.Clone();
// Assert for equality
}
Vì vậy, nhiệm vụ đầu tiên của tôi là có Assert
cho sự bình đẳng. Tôi thấy các tùy chọn sau đây:
- đi qua tất cả các thuộc tính (trường) của
MyType
và kiểm tra từng cái một - override
Equals()
trongMyType
để choMyType
nói nếu hai trường hợp đều bình đẳng (xem xét rằng đôi khi sự bình đẳng cho các bài kiểm tra là được xem là khác nhau về bình đẳng đối với mã sản xuất) - Kiểm tra với một số loại tuần tự nếu các trường hợp bằng nhau (cho trường hợp đó
MyType
sẽ phải là[Serializable]
, nhưng đôi khi rất khó thực hiện nếu nó có ví dụ Giao diện) - ... ??
Đối với hai đầu tiên tôi có thể thiết lập các thử nghiệm của mình và chúng hoạt động tốt. Nhưng nếu tôi thay đổi MyType
và thêm một thuộc tính bổ sung thì sao? Nếu Clone()
không sao chép điều này và tôi không thêm nó vào danh sách thuộc tính đã chọn hoặc phương thức equals thì thử nghiệm của tôi vẫn chuyển ngay cả khi thuộc tính không được sao chép.
Làm cách nào để bạn giải quyết loại thử nghiệm này?
Bạn đã xem Json (de) serialization hay không mà bị những hạn chế tương tự như serialization nhị phân ('[Serializable]') trong quan điểm của bạn? –