2012-02-24 11 views
5

Aquí lo que tengo:IgnoreArguments burla de Rhino() y los análisis a las lambda fue llamado es correcta

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

sistema bajo prueba:

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 
} 

¿Cómo se prueba con la configuración burla de Rhino el _writer como un simulacro y quiere probar que se llamó a la acción correcta en el método UpdateData.

He intentado esto:

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

no funciona.

puedo añadir el:

, p => p.IgnoreArguments() después del UpdateData dentro del AssertWasCalled, pero eso no me da lo que quiero, para asegurarse de SendVarData fue llamado con la variable de datos.

He mirado en esto:

How to assert that an action was called

pero mi acción no puede ser burlado como mockDialogService en su ejemplo.

¿Hay alguna manera de comprobar si una Acción o Func se llamó correctamente con los parámetros de entrada correctos, etc.?

+0

¿Es 'DataCenterWcfProxy.SendVarData()' un método virtual, o podría poner una interfaz en su lugar? – Jeroen

+0

no es solo un método público en la interfaz que se serializará sobre WCF. –

+0

Es una opción para agregar una interfaz 'IDataCenterWcfProxy' implementada por' DataCenterWcfProxy' y utilizada por el método 'Update' de' IDataCenterMsmqWriter'? – Jeroen

Respuesta

1

El UpdateData debe ser maqueta virtual de lo contrario no puede sobrescribir rinoceronte método

1

La mejor manera para verificar que una acción o Func fue llamada con los parámetros correctos sería utilizar el .WhenCalled extension. Se puede encontrar un ejemplo en el siguiente Google groups discussion.

Este ejemplo muestra cómo aprovechar el esperado vs real de salida en lugar de expectativas se cumplen o no.

Cuestiones relacionadas