日期:2014-05-18  浏览次数:20776 次

没天理,下面的测试代码都不通过?
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);