Trong thử nghiệm đơn vị (trong Visual Studio 2008) tôi muốn so sánh nội dung của đối tượng lớn (danh sách các loại tùy chỉnh, chính xác) với một tham chiếu được lưu trữ của đối tượng này. Mục đích là để đảm bảo rằng, bất kỳ phép tái cấu trúc nào sau này của mã tạo ra cùng một nội dung đối tượng.(Sâu) so sánh một đối tượng với tham chiếu trong các phép thử đơn vị (C#)
Ý tưởng bị loại bỏ: Ý tưởng đầu tiên là để tuần tự hóa thành XML và sau đó so sánh các chuỗi được mã hóa cứng hoặc nội dung tệp. Điều này sẽ cho phép dễ dàng tìm ra bất kỳ sự khác biệt nào. Tuy nhiên kể từ khi các loại của tôi không phải là XML serializable mà không có một hack, tôi phải tìm một giải pháp. Tôi có thể sử dụng nhị phân serialization nhưng điều này sẽ không thể đọc được nữa.
Có giải pháp đơn giản và thanh lịch nào cho điều này không?
EDIT: Theo đề nghị Marc Gravell của tôi làm bây giờ như thế này:
using (MemoryStream stream = new MemoryStream())
{
//create actual graph using only comparable properties
List<NavigationResult> comparableActual = (from item in sparsed
select new NavigationResult
{
Direction = item.Direction,
/*...*/
VersionIndication = item.VersionIndication
}).ToList();
(new BinaryFormatter()).Serialize(stream, comparableActual);
string base64encodedActual = System.Convert.ToBase64String(stream.GetBuffer(), 0, (int)stream.Length);//base64 encoded binary representation of this
string base64encodedReference = @"AAEAAAD....";//this reference is the expected value
Assert.AreEqual(base64encodedReference, base64encodedActual, "The comparable part of the sparsed set is not equal to the reference.");
}
Về bản chất tôi làm chọn các thuộc tính có thể so sánh đầu tiên, sau đó mã hóa đồ thị, sau đó so sánh nó với một tài liệu tham khảo mã hóa tương tự. Mã hóa cho phép so sánh sâu theo cách đơn giản. Lý do tôi sử dụng mã hóa base64 là, tôi có thể dễ dàng lưu trữ tham chiếu nó trong một biến chuỗi.
Ý tưởng tuần tự hóa dường như là ý tưởng tốt nhất cho đồ thị sâu. – StuartLC
Việc tuần tự hóa không hoàn toàn đáng tin cậy. Bạn có thể nhận được âm tính giả. Xem http://stackoverflow.com/questions/2244223/is-it-reliable-to-compare-two-instances-of-a-class-by-comparing-their-serialized –