В модульном тесте (в Visual Studio 2008) я хочу сравнить содержимое большого объекта (точнее, список пользовательских типов) с сохраненной ссылкой на этот объект.Цель состоит в том, чтобы гарантировать, что любые последующие рефакторинги кода приведут к одному и тому же объектному содержимому.
Исключенная идея: Первой мыслью было сериализоваться в XML, а затем сравнить жестко закодированные строки или файлсодержание.Это позволит легко найти любую разницу.Однако, поскольку мои типы не могут быть XML-сериализуемыми без взлома, я должен найти другое решение.Я мог бы использовать двоичную сериализацию, но это больше не будет доступно для чтения.
Есть ли простое и элегантное решение для этого?
РЕДАКТИРОВАТЬ: В соответствии с предложением Марка Гравелла я теперь делаю так:
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, заключается в том, что я могу легко сохранить ссылку на нее в строковой переменной.