2011-09-26 34 views
11

Tôi rõ ràng là nhầm lẫn - đây là một nhiệm vụ tôi đã hoàn thành với một số khung công tác khác mà chúng tôi đang cân nhắc (NMock, Moq, FakeItEasy). Tôi có một cuộc gọi chức năng tôi muốn khai. Cuộc gọi hàm có tham số ngoài (đối tượng).Tham số ngoài với RhinoMocks

Cuộc gọi chức năng nằm trong trường hợp sử dụng được gọi nhiều lần trong mã. Mã gọi trong tay tham số, bao gồm một đối tượng NULL cho tham số ngoài. Tôi muốn thiết lập một tham số OUT dự kiến, dựa trên các thông số khác được cung cấp.

Làm cách nào để chỉ định tham số INBOUND được mong đợi của NULL, tham số OUTBOUND ngoài dự kiến ​​của một đối tượng được điền theo cách tôi mong đợi? Tôi đã thử nó sáu cách để chủ nhật, và cho đến nay đã không thể có được bất cứ điều gì trở lại nhưng NULL cho tham số OUTBOUND ra của tôi.

Trả lời

20

Từ http://ayende.com/wiki/Rhino+Mocks+3.5.ashx#OutandRefarguments:

Ref và ra lập luận là đặc biệt, bởi vì bạn cũng cần phải thực hiện các trình biên dịch hạnh phúc. Từ khóa ref và out là bắt buộc, và bạn cần một trường làm đối số. Arg sẽ không cho phép bạn thất vọng:

User user; 
if (stubUserRepository.TryGetValue("Ayende", out user)) 
{ 
    //... 
} 
stubUserRepository.Stub(x => 
    x.TryGetValue(
    Arg.Is("Ayende"), 
    out Arg<User>.Out(new User()).Dummy)) 
    .Return(true); 

ra là bắt buộc cho trình biên dịch. Arg.Out (new User()) là một phần quan trọng đối với chúng tôi, nó xác định rằng đối số out nên trả về new User(). Giả chỉ là một trường của kiểu Người dùng được chỉ định, để làm cho trình biên dịch hài lòng.

+0

Tôi không làm việc này cho sim tê giác 3.6 mặc dù ... –

+0

Liên kết hiện nhận được 404 Không tìm thấy. – jakejgordon

6

Trong trường hợp sử dụng kho lưu trữ để tạo Mock/Stub

checkUser = MockRepository.GenerateMock<ICheckUser> 

Bạn có thể thiết lập kỳ vọng với tham số ra

checkUser 
.Expect(c => c.TryGetValue(Arg.Is("Ayende"), out Arg<User>.Out(new User()).Dummy) 
.Return(true) 
+1

Tôi không làm việc này cho sim tê giác 3.6 mặc dù ... –

4

Giải pháp này là sạch hơn và hoạt động tốt với Rhino Mocks 3.6:

myStub.Stub(x => x.TryGet("Key", out myValue)) 
     .OutRef("value for the out param") 
     .Return(true); 
Các vấn đề liên quan