-2

这是因为我试图通过以下方式对一段代码进行单元测试:

ReservationSearchParameters expectedSearchParams = new ReservationSearchParameters(),  sentSearchParameters = new ReservationSearchParameters();

List<Reservation> simpleReservationList = new List<Reservation>();

simpleReservationList.Add(........... I added data ..........)

expectedSearchParams.LocationIDs = "2";
_reservationDataLayerMock.Setup(x => x.LoadReservationsByOptionalParameters(expectedSearchParams)).Returns(simpleReservationList);

sentSearchParameters.LocationIDs = "2";
Assert.AreNotEqual(null, _reservationBL.GetReservationsByOptionalParameters(sentSearchParameters).Count);

我的测试失败了,它没有返回我试图让它返回的东西,即使我的 SearchParameters 数据集是准确的,就我而言。

所以我尝试了这个:

Assert.AreEqual(expectedSearchParams, sentSearchParameters);

它失败了。为什么?

4

2 回答 2

4

If ReservationSearchParametersis classnot astruct它的实例通过引用进行比较。这就是你得到错误的原因,因为有两个不同的对象有两个不同的指针,它们的属性具有相同的数据并不重要。

您应该为每个属性编写一个单独的断言。

于 2013-08-02T19:56:20.490 回答
2

您正在尝试比较两个恰好具有相同值的不相关对象。

类的默认相等检查将是引用相等,因为这是两个不同的对象,引用相等将失败。

为了使断言通过,您需要定义使这两个对象相等的原因。

根据Assert.AreEqual编写方式,您可能可以执行以下任何操作:

  1. 定义==and!=运算符。
  2. 覆盖bool Equals(object other){}(如果你这样做,建议也这样做int GetHashCode().
  3. 实施IEquatable<ReservationSearchParameters>

一旦你告诉它如何比较两个不同的对象,你的断言就应该通过了。

于 2013-08-02T19:58:11.020 回答