2011-10-14 24 views
5

Làm thế nào tôi có thể xác minh một giả được gọi trong phần "hành động" của thử nghiệm của tôi bỏ qua bất kỳ cuộc gọi nào đến mô hình trong phần "sắp xếp" của thử nghiệm.RhinoMocks: Xóa hoặc đặt lại AssertWasCalled()

[Test] 
public void ShouldOpenThrottleWhenDrivingHome() 
{ 
    var engineMock = MockRepository.GenerateStub<IEngine>(); 
    var car = new Car(engineMock); 
    car.DriveToGroceryStore(); // this will call engine.OpenThrottle 

    car.DriveHome(); 

    engine.AssertWasCalled(e => e.OpenThrottle()); 
} 

Tôi không muốn thử tiêm một mô hình mới hoặc dựa vào .Reateat() vì kiểm tra sau đó phải biết số lần phương thức được gọi trong quá trình thiết lập.

+1

Điều này đã được hỏi: http://stackoverflow.com/questions/770013/rhino-mocks-how-to-clear -previous-expect-on-an-object –

+0

Tôi đã đọc câu hỏi một lần nữa - nó có thể không phải là một bản sao, nhưng tôi không chắc chắn chính xác câu hỏi là gì. ClearStub() sẽ làm gì? Các cuống được khởi tạo ở đâu? –

+0

Vâng, đó không phải là một duplciate. Tôi đã chỉnh sửa câu hỏi, hy vọng nó rõ ràng hơn. –

Trả lời

5

Trong những tình huống này tôi sử dụng một mô hình thay vì vẫn còn sơ khai và sự kết hợp của ExpectVerifyAllExpectations:

//Arrange 
var engineMock = MockRepository.GenerateMock<IEngine>(); 
var car = new Car(engineMock); 
car.DriveToGroceryStore(); // this will call engine.OpenThrottle 

engineMock.Expect(e => e.OpenThrottle()); 

//Act 
car.DriveHome(); 

//Assert 
engineMock.VerifyAllExpectations(); 

Trong trường hợp này, kỳ vọng được đặt vào phương pháp sau khi sắp xếp xong. Đôi khi tôi nghĩ điều này là kiểu thử nghiệm riêng của mình: Sắp xếp, Mong đợi, Hành động, Xác nhận

1

Tôi đọc lại câu hỏi của bạn và có vẻ như bạn muốn một số phương pháp tách biệt giữa các cuộc gọi đến mô hình trong giai đoạn Sắp xếp và các cuộc gọi đến mô hình trong giai đoạn Đạo diễn. Tôi không biết bất kỳ hỗ trợ tích hợp nào cho nó, nhưng những gì bạn có thể làm là chuyển một cuộc gọi lại bằng cách sử dụng WhenCalled. Trong trường hợp của bạn mã sẽ là một cái gì đó như:

// Arrange 
var engineMock = MockRepository.GenerateStub<IEngine>(); 
var car = new Car(engineMock); 
int openThrotlleCount = 0; 
engineMock.Expect(x => x.OpenThrottle(arg)).WhenCalled(invocation => openThrotlleCount++); 
car.DriveToGroceryStore(); // this will call engine.OpenThrottle 
var openThrottleCountBeforeAct = openThrotlleCount; 

// Act 
car.DriveHome(); 

// Assert 
Assert.Greater(openThrotlleCount, openThrottleCountBeforeAct); 

Hy vọng nó sẽ giúp ...

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