Nunit 2.5.10 - 无法比较两个对象

时间:2011-06-28 11:57:33

标签: c#-4.0 nunit-2.5

我一直在寻找一种检查两个对象的方法,但我找到了Equals,Assert,AreEqual和其他一些对象,我不知道应该使用哪一个。此外,我一直在使用新的Nunit语法进行测试,我很难找到比较两个对象的新语法。这是我的测试和我的代码:

[Test]
public void CheckForDriversSelectedMoreThanOnce_ReturnsDriversSelectedMoreThanOnceAndTheirSelectedPositions()
{
  //arrange
  Prediction prediction = new Prediction();

  Driver expected = new Driver { position = 1, name = "Michael Schumacher" };

  //act
  var actual = prediction.CheckForDriversSelectedMoreThanOnce();

  //assert
  //Assert.That(actual, Is.EqualTo(expected));
  //Assert.That(Is.Equals(actual, expected);
  Assert.AreEqual(expected, actual);
}

public Driver CheckForDriversSelectedMoreThanOnce()
{
  Driver driver = new Driver { position = 1, name = "Michael Schumacher" };
  return driver;
}

Assert.That(actual, Is.EqualTo(expected));行和Assert.AreEqual(expected, actual);行给了我   预期:   但是:

另一行Assert.That(Is.Equals(actual, expected);给了我:   预期:是的   但是:错误

1 个答案:

答案 0 :(得分:1)

您可能需要在类中实现IEquatable,类似于

   public bool Equals(Type other)
        {
            return Name == other.Name && Position == other.Position;
        }

尝试使用'Contains'比较linq语句中的2个对象并且上面解决了这个问题时,我遇到了这个问题。

  

实例的默认实现   Equals()取决于您的对象类型。   引用类型继承   System.Object的默认值   实现,这很简单   对象标识(ReferenceEquals())   校验。默认情况下,引用类型   将在实例Equals()上返回true   当且仅当它们是相同的   对象实例。

我假设Assert.AreEqual(obj1,obj2)在某些时候会执行obj1.Equals(obj2),在这种情况下它们将不匹配。

另一种选择是断言实际属性,而不是匹配对象

Assert.AreEqual("Michael Schumacher", actual.Name);