2014-10-07 60 views
0

我正在使用Rhino Mocks生成Mock对象。我有以下的单元测试模拟HttpContextBase时出错

<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 

我上指示的行的错误:

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

C#或VB.NET的答案是可以接受的。我怎么能通过这个错误?

+0

您试过'_mock.Setup(...).Returns(...)'?或'_mock.SetupGet(...).Returns(...)' – W92 2014-10-07 19:59:41

+0

@ W92 - 不,我对Mock框架不太熟练。也许那是我的问题所在。 – 2014-10-07 20:03:27

+0

也许它可以帮助你:http://stackoverflow.com/questions/1389744/testing-controller-action-that-uses-user-identity-name/6752924#6752924 – W92 2014-10-07 20:04:07

回答

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); 
     //... 
    }