学习如何使用NUnit编写单元测试。
比较两个复杂对象时遇到困难。
这里有一个非常相似的问题的答案(使用Assert.AreEqual()比较两个对象),但是看起来你需要在你的对象上重写
给出示例对象:
我们有一些代码,其中在克隆各种对象,其中一些非常大。 考虑到这是一个很普遍的事情,在属性值级别上测试两个对象是否相同是否有同样普遍的方法?
这个示例有两个属性。在真实世界中,我有一个具有几十个属性的对象,其中一些是其他复杂对象的列表。
目前,我正在对对象进行序列化并比较字符串,但这感觉不太理想。
比较两个复杂对象时遇到困难。
这里有一个非常相似的问题的答案(使用Assert.AreEqual()比较两个对象),但是看起来你需要在你的对象上重写
Equals()
方法——考虑到可能存在的许多对象以及它们嵌套对象上可能存在的属性数量,这并不理想。给出示例对象:
public class AMockObject
{
public int Id { get; set; }
public ICollection<int> Numbers { get; set; }
public AMockObject()
{
Numbers = new List<int>();
}
}
我希望比较两个不同实例的对象是否具有相同的值,但发现Assert.AreEqual()
并没有像我预期的那样起作用。
例如,以下所有内容都无法通过测试:
// Example 1
AMockObject a = new AMockObject();
AMockObject b = new AMockObject();
Assert.AreEqual(a,b); // Fails - they're not equal
// Example 2
AMockObject a = new AMockObject() { Id = 1 };
AMockObject b = new AMockObject() { Id = 1 };
Assert.AreEqual(a, b); // Also fails
// Example 3
AMockObject a = new AMockObject() { Id = 1 };
a.Numbers.Add(1);
a.Numbers.Add(2);
a.Numbers.Add(3);
AMockObject b = new AMockObject() { Id = 1 };
b.Numbers.Add(1);
b.Numbers.Add(2);
b.Numbers.Add(3);
Assert.AreEqual(a, b); // also fails
我们有一些代码,其中在克隆各种对象,其中一些非常大。 考虑到这是一个很普遍的事情,在属性值级别上测试两个对象是否相同是否有同样普遍的方法?
这个示例有两个属性。在真实世界中,我有一个具有几十个属性的对象,其中一些是其他复杂对象的列表。
目前,我正在对对象进行序列化并比较字符串,但这感觉不太理想。