2011-06-28 12 views
0

私は2つのオブジェクトをチェックする方法を探していましたが、私はEquals、Assert、AreEqualなどいくつかのものを見つけました。 。さらに、私は新しいNunit構文でテストを行ってきましたが、2つのオブジェクトを比較するための新しい構文を見つけることは困難です。 しかしだった:Nunit 2.5.10 - 2つのオブジェクトを比較できない

[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

あなたは、あなたのクラス内でIEquatableを実装する必要があります。

この問題は、 'Contains'を使用してlinq文で2つのオブジェクトを比較しようとしたときに発生し、上記の問題が解決しました。

インスタンス のデフォルト実装は、オブジェクトの種類によって異なります。 参照型継承 System.Objectのデフォルトの 実装。これは単純な オブジェクトID(ReferenceEquals()) のチェックです。デフォルトでは、参照型 は、オブジェクトインスタンスが同じ の場合にのみ、インスタンスEquals() でtrueを返します。

私はAssert.AreEqual(obj1、obj2)がobj1.Equals(obj2)をしていると仮定していますが、その場合は一致しません。

別のオプションは、まだあなたの編集を見ていない、むしろ私があまりにも速くていたオブジェクト

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

を合わせるよりも、実際のプロパティをアサートすることであろう。 – DerMeister

+0

はい、「一致」を指示するカスタムロジックを定義します。 – ChrisBint

関連する問題