2016-04-11 4 views
3

単純なコントローラでユニットテストを実行して、ヌルIDが渡されたときに400コードを返すかどうかをチェックしています。しかし、私がこれをテストすると、結果は400エラーコードに等しいとは戻っていません。UnitTest on MVCコントローラHttpStatusCodeが等しくない

マイコード:

int? nullID = null; 
var edit = controller.Edit(nullID) as ActionResult; 

var result = new HttpStatusCodeResult(400, null); 

Assert.AreEqual(edit, result); 

私は私が期待した結果がここで見られますテストデバッグする場合:

編集結果:

Edit Result

期待される結果:

Expected Result

ここで私は間違っていますか?

+0

あなたの編集内容はHttpStatusCodeResult型であり、テストで指定した結果と同じように、説明のないステータスコード400が含まれています。何がうまくいかないのでしょうか? あなたの主張は失敗していますか?その場合、私は、HttpStatusCodeResultの.Equals実装は、あなたが期待していることをdooingしていないと言っています。 –

+0

私は、編集と結果が同じで、失敗した私のテストで同じであると主張します。 – haddow64

答えて

3

私はHttpStatusCodeResultのequalsメソッドが参照キーを見ていると思います。私はあなたの設定をテストして、私のアサートも失敗します。しかし、ステータスコード自体をアサートすることは機能します。例を参照してください。

[TestMethod] 
public void Test() 
{ 

    var resultOne = new HttpStatusCodeResult(400, null); 
    var resultTwo = new HttpStatusCodeResult(400, null); 

    // Assert 
    Assert.AreEqual(resultOne.StatusCode, resultTwo.StatusCode); 

    Assert.AreEqual(resultOne, resultTwo); 
} 

Assert.AreEqual(resultOne, resultTwo);はここにあなたが等号implemenationがObjectから継承されますし、そのためには何もないされていることがわかります

更新

がHttpStatusCodeResultについてMSDN pageを参照してください。失敗しながらAssert.AreEqual(resultOne.StatusCode, resultTwo.StatusCode);が成功オブジェクト内のプロパティで、参照キーのみを参照します。

4

Assert.AreEqual(a,b)Assert.IsTrue(Object.Equals(a,b))

HttpStatusCodeResult同じであるEqualsを実装していないので、コールが現在のインスタンスが参照型に等しい(Object)メソッドである場合Object.RefrenceEquals(a,b))

にターンデフォルトのデフォルトObject.Equals()に進み参照の等価性のテスト、Equals(Object)メソッドの呼び出しは、ReferenceEqualsメソッドの呼び出しと同じです。参照平等は、比較されるオブジェクト変数が同じオブジェクトを参照することを意味します。

関連する問題