0

我一直在寻找一种检查两个对象的方法,但我找到了 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);给了我:预期:真但是:假

4

1 回答 1

1

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

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

尝试使用“包含”比较 linq 语句中的 2 个对象时,我遇到了这个问题,上面解决了这个问题。

instance Equals() 的默认实现取决于您的对象类型。引用类型继承 System.Object 的默认实现,这是一个简单的对象标识 (ReferenceEquals()) 检查。默认情况下,当且仅当它们是相同的对象实例时,引用类型才会在实例 Equals() 上返回 true。

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

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

Assert.AreEqual("Michael Schumacher", actual.Name);
于 2011-06-28T12:04:59.420 回答