2012-02-24 11 views
5

Oto co mam:Rhino kpi IgnoreArguments() i testowanie jeśli lambda nazwano poprawnie

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

testowanego systemu:

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 
} 

Jak przetestować z Rhino Mocks ustawiania _writer jako a Mock i chce przetestować, czy poprawna akcja została wywołana w metodzie UpdateData.

Próbowałem to:

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

nie działa.

mogę dodać:

, p => p.IgnoreArguments() po UpdateData wewnątrz AssertWasCalled, ale to nie daje mi to, co chcę, aby upewnić się, SendVarData nazwano ze zmienną danych.

szukałem na to:

How to assert that an action was called

ale moje działania nie jest wyśmiewany jak mockDialogService w swoim przykładzie.

Czy istnieje sposób na sprawdzenie, czy Action lub Func został poprawnie wywołany z odpowiednimi parametrami wejściowymi, itp?

+0

Czy 'DataCenterWcfProxy.SendVarData()' jest metodą wirtualną, czy można umieścić interfejs w miejscu? – Jeroen

+0

nie jest to tylko publiczna metoda interfejsu, która będzie serializować w stosunku do WCF. –

+0

Jest to opcja dodania interfejsu 'IDataCenterWcfProxy', który jest implementowany przez' DataCenterWcfProxy' i używany przez 'Update' metody' IDataCenterMsmqWriter'? – Jeroen

Odpowiedz

1

UpdateData powinien być wirtualny inaczej nosorożec mock nie może nadpisać metodę

1

The najlepszą sposobem sprawdzenia, czy działania lub Func nazwano z prawidłowymi parametrami byłoby użyć .WhenCalled extension. Przykład można znaleźć poniżej: Google groups discussion.

Ten przykład pokazuje, jak wykorzystać Oczekiwany vs. Rzeczywista wyjściu spełnione zamiast oczekiwań lub nie.