2016-09-27 9 views
1

私はコードがこの問題を私の貧弱なタイトルよりも良く説明すると思います。同じオブジェクトをスタブするとRhinoMocksが失敗しますか?

_httpContextBaseHttpContextBaseですが、私はそれが重要ではないと思います。 _httpCookiecollectionはちょうどHttpCookieCollection

//Works fine 
_httpContextBase.Stub(c => c.Response.Cookies).Return(_httpCookieCollection); 

//Fails after attempting to stub the second line. "Object reference not set to an instance of an object". First line passes fine. 
_httpContextBase.Stub(c => c.Response.Cookies).Return(_httpCookieCollection); 
_httpContextBase.Stub(c => c.Request.Cookies).Return(_httpCookieCollection); 

//Work around 
var responseBaseMock = MockRepository.GenerateMock<HttpResponseBase>(); 
responseBaseMock.Stub(r => r.Cookies).Return(_httpCookieCollection); 
_httpContextBase.Stub(c => c.Response).Return(responseBaseMock); 

var requestBaseMock = MockRepository.GenerateMock<HttpRequestBase>(); 
requestBaseMock.Stub(r => r.Cookies).Return(_httpCookieCollection); 
_httpContextBase.Stub(c => c.Request).Return(requestBaseMock); 

は、上記のテストは、それぞれ独自の方法であると想像されます。各コメントは、その下のコードが実行されたときに何が起こるかを説明します。

最初の項目は機能し、2番目の項目は失敗し、3番目の項目は私の回避策です。私が知りたがっているのは、なぜそれを理解しているように見えないので、2番目のアイテムが失敗するのかです。項目2のための


スタックトレース(ライン1と2が反転している場合でも、同じスタックトレース)

System.NullReferenceException : Object reference not set to an instance of an object. 
    at Api.Tests.Client.CookieTests.<>c.<Test>b__12_1(HttpContextBase c) in Api.Tests\Client\CookieTests.cs:line 113 
    at Rhino.Mocks.RhinoMocksExtensions.Expect[T,R](T mock, Function`2 action) 
    at Rhino.Mocks.RhinoMocksExtensions.Stub[T,R](T mock, Function`2 action) 
    at .Api.Tests.Client.CookieTests.Test() in .Api.Tests\Client\CookieTests.cs:line 113 
+0

この質問にWindsorを使用することはありませんが、代わりにRhinoMocksを使用して質問に間違いを付けてタグ付けしましたか?また、例外のスタックトレースを含めることもお勧めします。 –

+0

@JonathonRossiああ...確かにしました。ありがとうジョナトン! – Questioning

答えて

0

私はあなたのコードを試していないので、私は右ではないかもしれません。しかし、_httpContextBase.Requestがnullである可能性があります。その場合、NullReferenceExceptionの理由とその理由は、_httpContextBase.Responseが同じ問題を持たないため、nullではないように見えます。

私はそのオブジェクトがあなたのテストで設定されているのか分かりませんが、それは見るべきことかもしれません。また、他の方法で試してみましたか?私は、それが何かのものだと思うでしょう。要求、それは第二のスタブではありません。

私はあなたがそれを求めていないことを知っていますが、私はHttpContextのような複雑なものを嘲笑するのに役立つと思われる別のアプローチを提案します。使用する部分(ResponseCookiesやRequestCookiesなど)を公開する抽象インタフェースを記述します。そのインターフェイスの実装では、HttpContextメンバーを直接使用することができますが、他のクラスは依存しなくなり、模擬やスタブを作成するための非常にシンプルなインターフェイスを使用できます。

+0

こんにちは、ロビン、ご返信ありがとうございます。レスポンスとリクエストはどちらも自分で動作します。私が最初の「うまく働く」アイテムを取って、レスポンスをリクエストに変更した場合、これは問題ありません。項目2の行を入れ替えても、2行目ではまだクラッシュします。最後の部分のあなたのアイデアアドバイスは良いです! – Questioning

関連する問題