2011-01-08 9 views
5
public interface ICell 
     { 
      int Value{get;} 

      void IncrementValue(); 
     } 

Tôi muốn tạo một sơ khai cho giao diện này trong RhinoMocks. Tôi có thuộc tính chỉ đọc và tôi muốn tăng giá trị của mình mỗi khi tôi gọi phương thức IncrementValue(). Điều này có thể không? Tôi không muốn tạo một lớp mới cho bài khai này.Cho biết hành vi của thuộc tính readOnly

Trả lời

3

Tôi có đề xuất tương tự với Jay, chỉ ngắn hơn. Không chắc chắn nếu điều này có một số nhược điểm như vậy.

int count = 0; 

    var mock = MockRepository.GenerateStub<ICell>(); 
    mock.Stub(p => p.Value).WhenCalled(a => a.ReturnValue = count).Return(42); 
    mock.Stub(p => p.IncrementValue()).WhenCalled(a => { 
     count = (int)count+1; 
    }); 

Return (42) được đặt ở đó để nói "Giá trị trả về một cái gì đó, đừng ném" và WhenCalled (a => a.ReturnValue = đếm) ghi đè mà trở về thung lũng 42 với giá trị hiện tại của số.

0

Bạn có thể cung cấp cho tê giác mocks một lambda để chạy khi một hàm được gọi. Lambda này sau đó có thể tăng một truy cập. Bạn có thể tìm thấy ví dụ here

+0

tôi đoán vấn đề martin của này là những gì để tăng ... giao diện chỉ có một thuộc tính get, không được thiết lập –

0

tôi đến với điều này quá:

cell.Stub(c => c.Value).WhenCalled(m => m.ReturnValue = cell.GetArgumentsForCallsMadeOn(c => c.IncrementValue()).Count).Return(0); 

Trước khi giúp đỡ của bạn tôi đã nhầm lẫn với hành vi của phương pháp WhenCalled ... nhưng tôi nghĩ rằng cách tiếp cận của bạn là tốt hơn so với một