【问题标题】:Rhino mock noob - Help needed in setting up a stub and assigning a webresponseRhino mock noob - 设置存根和分配网络响应所需的帮助
【发布时间】:2015-07-02 15:21:30
【问题描述】:

我对 Rhino Mocks 完全陌生……实际上是在嘲笑。我仍在思考如何编写模拟代码,非常感谢一些指导。

我有一个包含类似内容的测试类:

  [Test Class]     

    IGeneralMethods myGeneralMethods = new services.Models.GeneralMethods();
        MockRepository mockEngine = new MockRepository();
        IGeneralMethods simulatedService = mockEngine.DynamicMock<IGeneralMethods>();

        simulatedService.Stub(x => x.GetWebResponse().GetResponseStream() = myFakeResponse);

现在最后一行(不起作用)我正在尝试创建一个存根,这就是我卡住的地方。我要存根的代码是这样的:

public WebResponse GetWebResponse(WebRequest request)
    {
        try
        {
            WebResponse getResponse = request.GetResponse(); 
            return getResponse;
        }
        catch
        {
            //other actions
        }
        return null;
    }

我有另一种方法可以创建 WebResponse,所以我想做的是阻止 GetWebResponse 方法实际尝试发出请求,并返回我的假/预制 Web 响应。

但是我还没有史酷比从哪里开始?

更新

我一直在调整代码并取得进展。这是我最新的代码(正在进行中):

        MockRepository mockEngine = new MockRepository();

        byte[] responseData = Encoding.UTF8.GetBytes("my XML here");
        Stream stream = new MemoryStream(responseData);
        WebRequest request = (WebRequest)mockEngine.StrictMock(typeof(WebRequest));
        WebResponse response = (WebResponse)mockEngine.StrictMock(typeof(WebResponse));
        Expect.On(request).Call(request.GetResponse()).Return(response);
        Expect.On(response).Call(response.GetResponseStream()).Return(stream);


        var stubbedGetWebResponse = mockEngine.Stub<IGeneralMethods>();

        stubbedGetWebResponse.Stub(x => x.ModeltoXml(newTicket)).Return("test");
        stubbedGetWebResponse.Stub(x => x.GetWebResponse(request)).Return(response);


        var test = new MyApi().NewIn(newTicket, referrer, stubbedGetWebResponse);

        stubbedGetWebResponse.VerifyAllExpectations();

我确定我在这里没有掌握一些东西,因为当我调试测试时,我的 ModeltoXml 方法没有返回字符串“test”。我已经对这个方法进行了存根处理,因为我还注意到在我的测试类中将填充模型传递给它,ModeltoXml 方法只返回 null。所以我猜 Rhino 已经在我的 IGeneralMethods 类中删除了所有方法。

【问题讨论】:

    标签: c# asp.net asp.net-mvc mocking rhino-mocks


    【解决方案1】:

    由于WebRequest 是一个抽象类,请尝试使用PartialMockPartialMock 会让你覆盖那些虚方法。

    // Arrange
    var mockResp = MockRepository.GeneratePartialMock<WebResponse>();
    var responseData = Encoding.UTF8.GetBytes("my XML here");
    var stream = new MemoryStream(responseData);
    mockResp.Expect(x => x.GetResponseStream()).Return(stream);
    
    var mockReq = MockRepository.GeneratePartialMock<WebRequest>();
    mockReq.Expect(x => x.GetResponse()).Return(mockResp);
    
    // Act
    // test here!
    
    // Assert
    mockReq.VerifyAllExpectations();
    mockResp.VerifyAllExpectations();
    

    【讨论】:

      猜你喜欢
      • 2013-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-11
      • 1970-01-01
      • 2012-03-08
      • 1970-01-01
      相关资源
      最近更新 更多