2009-05-17 24 views
5

Estoy tratando de usar Moq 3.x, funciona magníficamente. Sin embargo, tengo un problema que no puedo resolver. DadaMoq con el argumento Acción

public interface ITestSpec 
{ 
    bool Run(Action<string, string> onIncorrectResponse); 
} 

Estoy tratando los siguientes:

var passingTestSpec = new Mock<ITestSpec>(); 
passingTestSpec 
    .Setup(m => m.Run(null)) 
    .Returns(true); 

Action<string, string> fakeAction = 
    (expected, actual) => { throw new Exception("Should not run"); }; 

Assert.IsTrue(passingTestSpec.Object.Run(fakeAction)); 

Mi problema es que cualquier llamada en passingTestSpec.Object.Run (... algo de acción ...) devuelve falso. Parece que la biblioteca de Moq está intentando hacer coincidir la acción con el argumento que pasé a Ejecutar() en la llamada a Configuración() y falla. En realidad, no importa qué acción puse en la llamada Run() ... todavía devuelve false.

¿Alguna idea?

[Editar] Acabo de descubrir algo; si reemplazo la línea de configuración con

.Setup(m => m.Run(fakeAction)) 

pase la prueba. Sin embargo, no puedo saber con qué acción se invocará el método .Run(), por lo que esta no es una solución. ¿Alguien sabe de un It.IsAny equivalente para acciones?

Respuesta

13

¿Qué pasa con:

It.IsAny<Action<string, string>>() 
+0

LOL Debería haber sabido que alguien va a encontrar la solución ... para pensar que perdí varias horas en este :(Gracias, voy a ir con eso, es mejor que el mío. –

Cuestiones relacionadas