Search code examples
c#vb.netrhino-mocks

Error when mocking HttpContextBase


I'm using Rhino Mocks to generate a Mock object. I have the following unit test

<TestClass()> Public Class VariousTests
  Dim mocks As New MockRepository()
  Dim _mockContext = mocks.PartialMock(Of HttpContextBase)()
  Dim _mockRequest = mocks.PartialMock(Of HttpRequestBase)()

<TestMethod()> Public Sub btnSubmitPage1_ClickTest()
    Dim uri As New Uri("http://mypcname.local")
    SetupResult.For(_mockContext.Request).Return(_mockRequest)
    SetupResult.For(_mockContext.Request.Url).Return(uri)
    SetupResult.For(_mockContext.Request.Url.AbsoluteUri).Return(uri) 'Error happens here
    HttpContextFactory.SetCurrentContext(_mockContext)
    '...
End Sub

End Class

I get an error on the indicated line:

Additional information: Previous method 'HttpContextBase.get_Request();' requires a return value or an exception to throw.

C# or VB.NET answers are acceptable. How can I get past this error?


Solution

  • I re-wrote the test in C# and it worked. What I have now is a little different from the above. But the difference is small overall. It works now.

    [TestClass]
    public class VertrueSignupViewTests
    {
        private SplContextProvider _splProvider = new SplContextProvider();
        private IVertrueSignupView _form = MockRepository.GenerateMock<IVertrueSignupView>();
        private IFeatureToggle _toggle = MockRepository.GenerateMock<IFeatureToggle>();
        HttpContextBase mockHttpContext = MockRepository.GenerateMock<HttpContextBase>();
        HttpRequestBase mockRequest = MockRepository.GenerateMock<HttpRequestBase>();
        HttpResponseBase mockResponse = MockRepository.GenerateMock<HttpResponseBase>();
        HttpSessionStateBase httpSessionState = MockRepository.GenerateMock<HttpSessionStateBase>();
    
        [TestMethod]
        public void ButtonSubmitTest()
        {
            mockHttpContext.Stub(x => x.Request).Return(mockRequest);
            mockHttpContext.Stub(x => x.Session).Return(httpSessionState);
            mockHttpContext.Stub(x => x.Response).Return(mockResponse);
            _toggle.Stub(t => t.IsOn()).Return(true);
    
            var uri =
                new Uri(
                    "http://mypc.local/");
            mockRequest.Stub(u => u.Url).Return(uri);
            mockRequest.Stub(u => u.QueryString)
                .Return(col);
    
            HttpContextFactory.SetCurrentContext(mockHttpContext);
            //...
        }