(Глубокое) сравнение объекта к ссылке в модульных тестах (C#)

В Модульном тесте (в Visual Studio 2008) я хочу сравнить содержание большого объекта (список пользовательских типов, быть точным) с сохраненной ссылкой этого объекта. Цель состоит в том, чтобы удостовериться, что любые более поздние рефакторинги кода производят то же содержимое объекта.

Отброшенная Идея: первая мысль состояла в том, чтобы сериализировать к XML и затем сравнить строки hardcoded или содержание файла. Это допускало бы легкое открытие любого различия. Однако, так как мои типы не XML сериализуемый без взлома, я должен найти другое решение. Я мог использовать двоичную сериализацию, но это больше не будет читаемо.

Существует ли простое и изящное решение этого?

Править: Согласно предложению Marc Gravell мне действительно теперь нравится это:

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.");
        }

В сущности я действительно выбираю сопоставимые свойства сначала, затем кодирую график, затем сравниваю его со столь же закодированной ссылкой. Кодирование включает глубокое сравнение простым способом. Причина я использую кодирование base64, что я могу легко сохранить ссылку это в строковой переменной.

6
задан Marcel 13 August 2010 в 11:29
поделиться