Mar*_*cel 6 c# comparison unit-testing object visual-studio
在单元测试中(在Visual Studio 2008中)我想比较一个大对象(确切地说是自定义类型列表)的内容与该对象的存储引用.目标是确保代码的任何后续重构产生相同的对象内容.
丢弃的想法:首先想到的是序列化为XML,然后比较硬编码字符串或文件内容.这样可以轻松找到任何差异.但是,由于我的类型不是没有黑客的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.");
}
Run Code Online (Sandbox Code Playgroud)
本质上,我首先选择可比较的属性,然后对图形进行编码,然后将其与类似编码的参考进行比较.编码可以通过简单的方式进行深入比较.我使用base64编码的原因是,我可以轻松地将引用存储在字符串变量中.
我仍然倾向于使用序列化.但不是必须知道二进制文件,只需创建一个预期的图形,序列化它.现在序列化实际图形并比较字节.这是唯一有用的告诉你,那里是一个区别; 你需要检查才能找到什么,这是一种痛苦.