В Модульном тесте (в 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, что я могу легко сохранить ссылку это в строковой переменной.