2009-12-23 24 views
6

Tôi đang viết các bài kiểm tra đơn vị bằng cách sử dụng RhinoMocks để chế nhạo và giờ tôi đang cần một số chức năng mới mà tôi chưa từng sử dụng trước đó.Sử dụng trình kích hoạt gọi lại với RhinoMocks

Tôi muốn gọi hàm, một lần nữa sẽ gọi hàm không đồng bộ. Để mô phỏng rằng hàm async kết thúc và kích hoạt callback đã cho với kết quả từ thực thi, tôi cho rằng tôi có thể sử dụng chức năng Callback trong RhinoMocks, nhưng làm cách nào để thực hiện điều này?

Về cơ bản những gì tôi muốn làm là một cái gì đó như thế này:

fakeSomething = MockRepository.GenerateMock<ISomething>(); 
fakeSomething.FictionousFunctionSettingCallback(MyFunctionCalled, MyCallback, theParameterToGiveCallback); 
var myObj = new MyClass(fakeSomething);  
myObj.Foo(); 
// Foo() now fires the function MyFunctionCalled asynchronous, 
// and eventually would trigger some callback 

Vì vậy; là có một chức năng thực sự tôi có thể thay thế này "FictionousFunction" với để thiết lập này? Xin hỏi nếu điều này là không rõ ràng ..

Trả lời

12

Chỉ cần xác định nó sử dụng WhenCalled:

fakeSomething = MockRepository.GenerateMock<ISomething>(); 
fakeSomething 
    .Stub(x => x.Foo()) 
    .WhenCalled(call => /* do whatever you want */); 

ví dụ, bạn có thể sử dụng luận cứ tài sản của đối số gọi:

fakeSomething 
    .Stub(x => x.Foo(Arg<int>.Is.Anything)) 
    .WhenCalled(call => 
    { 
    int myArg = (int)call.Arguments[0]; // first arg is an int 
    DoStuff(myArg); 
    }); 

Nó không phải là không đồng bộ . Bạn có thể không cần nó là không đồng bộ, nó làm cho cuộc sống của bạn dễ dàng hơn anyway nếu nó không phải là.

+0

Cảm ơn! Điều này nghe có vẻ giống như chức năng tôi đang tìm kiếm. Giáng sinh đang bắt kịp tôi ở đây, vì vậy phải đợi một vài ngày trước khi tôi kiểm tra nó .. Đang chờ chấp nhận câu trả lời trong trường hợp tôi có một số câu hỏi tiếp theo. Cảm ơn một lần nữa! – stiank81

+0

Và không - tôi chắc chắn không muốn điều này là không đồng bộ trong các bài kiểm tra của tôi. Các chức năng tôi đang chế nhạo là không đồng bộ, nhưng tôi sẽ giả mạo nó một cách đồng bộ - đó là lý do tại sao tôi cần phải kích hoạt một cuộc gọi chức năng khi chức năng chế giễu được gọi là. – stiank81

+0

Cuối cùng kiểm tra nó. Đây chỉ là những gì tôi cần! Hoạt động tốt - chỉ cần thêm .Stub (..) sau fakeSomething. Cảm ơn một lần nữa! – stiank81

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