2009-06-20 29 views
6

Xin chào mọi người ... đang cố gắng sắp xếp mocking của tôi với asp.net MVC.Mã Moq này sẽ trông giống như thế nào trong RhinoMocks

Tôi đã tìm thấy ví dụ này trên mạng bằng cách sử dụng Moq, về cơ bản tôi hiểu nó để nói: khi ApplyAppPathModifier được gọi, trả về giá trị đã được chuyển cho nó.

Tôi không thể tìm ra cách để làm điều này trong Rhino Mocks, bất kỳ suy nghĩ nào?

var response = new Mock<HttpResponseBase>(); 
response.Expect(res => res.ApplyAppPathModifier(It.IsAny<string>())) 
      .Returns((string virtualPath) => virtualPath); 
+0

Điều này thực sự có thể làm việc, chỉ cần kiểm tra ngay bây giờ ... luật sods của nó, một khi bạn gửi một câu hỏi sau đó bạn tìm thấy một câu trả lời ... sẽ xác nhận SetupResult . Do ((Func ) ((arg) => {return arg;})); – Keith

Trả lời

3

Như tôi đã đề cập ở trên, luật sods, một khi bạn gửi để được giúp đỡ bạn tìm thấy nó trong 5 phút sau đó (thậm chí sau khi tìm kiếm một thời gian). Dù sao vì lợi ích của những người khác làm việc này:

SetupResult 
    .For<string>(response.ApplyAppPathModifier(Arg<String>.Is.Anything)).IgnoreArguments() 
    .Do((Func<string, string>)((arg) => { return arg; })); 
1

Trừ khi tôi đang đọc sai mã, tôi nghĩ bạn có thể đơn giản hóa nó xuống một chút. Hãy thử điều này:

var response = MockRepository.GenerateMock<HttpResponseBase>(); 

response.Stub(res => res.ApplyAppPathModifier(Arg<String>.Is.Anything)) 
         .IgnoreArguments() 
         .Return(virtualPath); 
+0

@womp, cảm ơn bạn đời. Trong ví dụ của bạn virtualPath là gì, một biến hiện có? Những gì tôi sau là để trả về biến đã thực sự được chuyển đến ApplyAppPathModifier. Điều này không biết cho đến khi chạy. Tôi thực sự có nó để làm việc bằng cách sử dụng bình luận của tôi ở trên và sẽ đăng nó ngay bây giờ – Keith

+0

Nếu bạn muốn biết các đối số thông qua để ApplyAppPathModifier, bạn có thể sử dụng mã của womp và thêm dòng sau: var args = response.GetArgumentsForCallsMadeOn (x = > x.ApplyAppPathModifier (Arg .Is.Anything)); –

8

Nếu bạn đang sử dụng phương pháp sơ khai như trái ngược với phương pháp SetupResult, sau đó cú pháp cho điều này là dưới đây:

response.Stub(res => res.ApplyAppPathModifier(Arg<String>.Is.Anything)) 
       .Do(new Func<string, string>(s => s)); 
Các vấn đề liên quan