2011-10-11 34 views
6

Làm cách nào để thực thi một đối tượng gốc trong RhinoMocks để trả về khoảng trống cho một phương thức void trên nó?Làm thế nào tôi có thể thực thi một phương thức void để trả về Void từ một đối tượng Stub?

Hãy ví dụ này:

public interface ICar 
{ 
    string Model {get;set;} 
    void Horn(); 
} 

ICar stubCar= MockRepository.GenerateStub<ICar>(); 
stubCar.Expect(c=>c.Horn()).Return(//now what so that 
            // it returns nothing as the meth. returns void ? 
+0

Nếu nó được xác định với loại trả lại khoảng trống, cách _could_ nó trả về bất kỳ thứ gì? – CodingGorilla

+0

Mối quan tâm của tôi là nếu tôi không thực thi nó để trả lại khoảng trống, cuộc gọi đến bài khai này sẽ ném một ngoại lệ. Tôi đã cố gắng và thấy rằng: Jon đã đúng! – pencilCake

Trả lời

8

Phương pháp này không thể trả về một giá trị - đó là một phương pháp vô hiệu. CLR sẽ không cho phép nó cố gắng trả về một giá trị. Bạn không cần phải kiểm tra cho điều này.

Bạn chỉ cần cuộc gọi Expect.

6

Phương thức Return() không hợp lệ cho cuộc gọi phương thức void. Thay vào đó bạn muốn một cái gì đó như thế này:

ICar stubCar= MockRepository.GenerateStrictMock<ICar>(); 
stubCar.Expect(c=>c.Horn()); 
stubCar.DoSomethingThatIsSupposedToCallHorn(); 
stubCar.VerifyAllExpectations(); 

mà sẽ cho bạn biết hay không Horn() được gọi.

Đó là cách bạn kiểm tra các phương thức void được gọi khi kiểm tra đơn vị. Bạn làm như sau:

  1. Thiết lập một vọng (Expect())
  2. Gọi phương pháp này mà nên gọi vọng
  3. Xác minh rằng các phương pháp dự kiến ​​sẽ được gọi.
+0

Tôi không nghĩ rằng điều này sẽ làm việc vì bạn đang sử dụng một Stub không phải là một giả, và sơ khai sẽ luôn vượt qua VerifyAllExpectations xem: http://www.wrightfully.com/on-rhino-mocks-verifyallexpectations-vs-assertwascalled/ – crabCRUSHERclamCOLLECTOR

+0

Đó phải là một mô hình nghiêm ngặt. Tôi sẽ thay đổi nó. Cảm ơn vì đã bắt được điều đó. –

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