模拟HttpContextBase时出错

时间:2014-10-07 19:50:14

标签: c# vb.net rhino-mocks

我正在使用Rhino Mocks生成一个Mock对象。我有以下单元测试

<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

我在指定的行上收到错误:

  

其他信息:上一个方法'HttpContextBase.get_Request();'需要返回值或抛出异常。

C#或VB.NET答案是可以接受的。我怎样才能解决这个错误?

1 个答案:

答案 0 :(得分:0)

我在C#中重新编写了测试,但它确实有效。我现在拥有的与上述有点不同。但总体上差异很小。它现在有效。

[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);
        //...
    }
相关问题