2009-08-28 24 views
8

Có cách nào với Rhino Mocks để đặt thuộc tính của Stub nếu phương thức được gọi hay không.Rhino Mocks - Đặt thuộc tính nếu phương thức được gọi là

Cái gì đó như thế này: (Mã Fake in đậm)

callMonitor.Expect (x => x.HangUp()). SetProperty (callMonitor.InACall = false);

Phương thức HangUp trả về vô hiệu và tôi thực sự không thể thay đổi điều đó. Nhưng tôi muốn tôi biết rằng cuộc gọi đã được treo lên khi HangUp được gọi.

Trả lời

10

Bạn có thể sử dụng phương pháp "WhenCalled" để chạy mã của riêng bạn khi được gọi; khá chắc chắn nó sẽ làm việc với Mocks, quá. Theo tài liệu, WhenCalled là một sự thay thế/nâng cấp cho cuộc gọi lại.

callMonitor.Expect(x => x.HangUp()) 
.WhenCalled(invocation => callMonitor.InCall = false); 

Một số thông tin ở phần cuối của bài viết này: http://grahamnash.blogspot.com/2008/10/rhino-mocks-35.html

+0

Vẫn là một sự lạm dụng, mặc dù tên phương thức đã thay đổi. WhenCalled, như Callback, được dự định sẽ được sử dụng trong đánh giá kỳ vọng nâng cao, không phải để tính toán tùy ý. – tvanfosson

+0

Bạn sẽ đề xuất gì thay thế? Một kiểm tra cán tay đôi? –

+0

Thực ra, tôi muốn xem bài kiểm tra. Dường như với tôi nếu bài kiểm tra tập trung đủ, có thể không cần thiết. – tvanfosson

1

Có thể có một số điều kiện mà bạn sẽ cần làm, nhưng nói chung tôi mong bạn sẽ chỉ đơn giản là thiết kế mô hình của bạn để nó trả về giá trị phù hợp với mã của bạn. Ngoại lệ duy nhất cho điều này mà tôi có thể nghĩ là một phần mocks nơi bạn đang thử nghiệm một phần của một lớp và muốn giả lập các phần khác.

Đặt mô hình trên một thuộc tính khá dễ dàng.

callMonitor.Expect(x => x.HangUp()); 
callMonitor.Expect(x => x.InACall).Return(false); 

Nếu callMonitor là sơ khai, bạn có thể trực tiếp đặt thuộc tính.

callMonitor.Stub(x => x.HangUp()); 
callMonitor.InACall = false; 
1

, bạn có thể sử dụng Callback phương pháp:

callMonitor.Expect(x => x.HangUp()).Callback(() => callMonitor.InCall = false); 
+0

Chính xác những gì tôi sẽ có văn bản (có tôi đi qua câu hỏi này 6 phút trước;) –

+0

lạm dụng Horrible của cơ chế gọi lại. Thật khó để nói, vì không có nhiều thông tin trong bài đăng, nhưng tôi nghĩ OP không tập trung đủ vào các bài kiểm tra. Đọc các lưu ý của Ayende về việc sử dụng các cuộc gọi lại tại http://ayende.com/Wiki/(S(zwkmge45vdgkgvznp13mgc55))/Rhino+Mocks+Callbacks.ashx – tvanfosson

+2

FWIW - cuộc gọi lại được cho là được sử dụng để đánh giá xem liệu sự mong đợi có phải là đã gặp, không làm tính toán tùy ý. – tvanfosson

-1

Tôi không phải chuyên gia RhinoMocks, nhưng tôi tin rằng điều này sẽ làm việc.

SetupResult.For(callMonitor.InACall).Return(false); 
+0

Tôi tin rằng đó không phải là những gì anh ta hỏi. Ông hỏi nếu có một cách để cung cấp cho phương pháp HangUp một thực hiện ngẫu hứng mà đặt tài sản InCall sai khi phương thức HangUp được gọi. Những gì bạn có sẽ khiến phương thức InACall trả về false cho dù phương thức HangUp có được gọi hay không. –

Các vấn đề liên quan