2012-02-24 29 views
5

Dưới đây là những gì tôi có:IgnoreArguments Rhino Mocks() và kiểm tra nếu một lambda được gọi một cách chính xác

public interface IDataCenterMsmqWriter 
    { 
     void UpdateData(Action<DataCenterWcfProxy> action); 
    } 

hệ thống được kiểm tra:

public class WcfService : IWcfService 
{ 
    private readonly IDataCenterMsmqWriter _writer; 

    public WcfService(IDataCenterMsmqWriter writer) 
    { 
     _writer = writer; 
    } 

    #region IWcfService members 

    public void SendData(SomeData data) 
    { 
     _writer.UpdateData(d => d.SendVarData(data)); 
    } 

    // other members of IWcfService elided 
    #endregion 
} 

Làm thế nào để tôi thử nghiệm với Rhino Mocks thiết lập _writer như một Mô hình và muốn kiểm tra rằng Hành động chính xác được gọi trong phương thức UpdateData.

Tôi đã thử điều này:

// _writer is setup as a mock 
var data = new SomeData(); 
_wcfServiceSUT.SendData(data); 
_writer.AssertWasCalled(d => d.UpdateData(x => x.SendVarData(data)); 

không hoạt động.

tôi có thể thêm:

, p => p.IgnoreArguments() sau khi UpdateData bên trong AssertWasCalled, nhưng điều đó không cho tôi những gì tôi muốn, để đảm bảo SendVarData được gọi với biến dữ liệu.

tôi đã xem xét điều này:

How to assert that an action was called

nhưng hành động của tôi là không chế giễu như mockDialogService trong ví dụ của mình.

Có cách nào để kiểm tra xem một Hành động hoặc Func có được gọi đúng với thông số đầu vào phù hợp không?

+0

Phương thức ảo có phải là 'DataCenterWcfProxy.SendVarData()' hay bạn có thể đặt giao diện tại chỗ không? – Jeroen

+0

không chỉ là phương thức công khai trên giao diện sẽ tuần tự hóa trên WCF. –

+0

Nó là một tùy chọn để thêm một giao diện 'IDataCenterWcfProxy' được triển khai bởi' DataCenterWcfProxy' và được sử dụng bởi phương thức 'Update' của' IDataCenterMsmqWriter'? – Jeroen

Trả lời

1

Các UpdateData nên ảo giả khác tê giác không thể ghi đè phương pháp

1

Các tốt nhất cách để xác minh rằng một hành động hoặc Func được gọi với các thông số chính xác sẽ được sử dụng .WhenCalled extension. Bạn có thể tìm thấy ví dụ trong Google groups discussion sau đây.

Ví dụ này cho biết cách tận dụng số lượng Được mong đợi so với kết quả thực tế thay vì đáp ứng được hoặc không.

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