2014-10-07 63 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); 
     //... 
    }