2012-02-24 9 views
5

Ecco quello che ho:IgnoreArguments Rhino prende in giro() e il test se un lambda è stato chiamato correttamente

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

sistema in prova:

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 
} 

Come faccio a testare con l'impostazione Rhino Mocks la _writer come un Mock e vuoi testare che sia stata chiamata l'azione corretta nel metodo UpdateData.

Ho provato questo:

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

non funziona.

posso aggiungere il:

, p => p.IgnoreArguments() dopo l'UpdateData all'interno del AssertWasCalled, ma che non mi dà quello che voglio, per assicurarsi che SendVarData è stata chiamata con la variabile di dati.

Ho guardato questo:

How to assert that an action was called

ma la mia azione non si può beffare come mockDialogService nel suo esempio.

C'è un modo per verificare se un'azione o Func sono stati chiamati correttamente con i parametri di input corretti, ecc.?

+0

'DataCenterWcfProxy.SendVarData()' è un metodo virtuale o è possibile inserire un'interfaccia? – Jeroen

+0

no, è solo un metodo pubblico sull'interfaccia che verrà serializzato su WCF. –

+0

È un'opzione per aggiungere un'interfaccia 'IDataCenterWcfProxy' che viene implementata da' DataCenterWcfProxy' e utilizzata dal metodo 'Update' di' IDataCenterMsmqWriter'? – Jeroen

risposta

1

L'UpdateData dovrebbe essere virtuale finto altrimenti rinoceronte non può sovrascrivere metodo

1

Il migliore modo di verificare che un'azione o Func è stato chiamato con i parametri corretti sarebbe quella di utilizzare il .WhenCalled extension. Un esempio può essere trovato nel seguente Google groups discussion.

Questo esempio mostra come sfruttare il Previsto vs. effettivi uscita piuttosto che aspettative soddisfatte o no.

Problemi correlati