2011-06-28 130 views
0

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

[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

你可能需要在你的Class中实现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); 
+0

我过快有匹配,没有看到您的编辑呢。 – DerMeister

+0

是的,并定义决定'匹配'的自定义逻辑 – ChrisBint