【发布时间】:2016-09-27 12:16:49
【问题描述】:
我认为代码将比我糟糕的标题更好地解释这个问题。
_httpContextBase 是HttpContextBase,但我认为这并不重要。 _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 项的堆栈跟踪(即使第 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
【问题讨论】:
-
我在这个问题中没有看到 Windsor 的任何用途,但也许是 RhinoMocks,您是否错误地为您的问题命名和标记?包含异常的堆栈跟踪也是一个好主意。
-
@JonathonRossi 哦...我确实做到了。谢谢乔纳森!
标签: c# mocking rhino-mocks