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