没天理,下面的测试代码都不通过?
public void GetPersonByIdTest()
{
Person target = new Person();
string contactid = "1 "; // TODO: Initialize to an appropriate value
PersonInfo expected = new PersonInfo(1, "Gustavo ", "Achong ");
PersonInfo actual;
actual = new PersonInfo(1, "Gustavo ", "Achong ");
Assert.AreEqual(expected, actual, "BLL.Person.GetPersonById did not return the expected value. ");
}
expected和actual怎么都不一样,后来我干脆hard code成一样的,没天理阿,连这样也显示不一样,难道areequal不能用来比较引用类型?他们比较的难道是是否指向同一个引用?!
我用的是.net2005 自带的测试工具。
------解决方案--------------------当然不一样
------解决方案--------------------除非你重写
Equal函数
类似string
------解决方案--------------------看看MS的说法
http://msdn2.microsoft.com/en-us/library/ms243496(VS.80).aspx
你觉得Console.WriteLine(expected.Equals(actual))会输出什么??
------解决方案--------------------当然要重写Equal,否则怎么知道两个引用类型在什么情况下相等呢,
要知道有时候判断两个引用类型相等并不一定是两个引用类型中所有
字段都相等就相等,可能没个字段相等就认为相等,这要看实际应用了
测试工具无法知道你的实际应用中判断两个引用类型相等的依据是什么
------解决方案--------------------EQUAL不可能比较出你的类中的每个属性的值是不是相同啊.
要重写EQUAL.
或者把属性值拿出来做比较
Assert.AreEqual(actual.Name,expected.Name);
Assert.AreEqual(actual.Age,expected.Age);