2009-05-17 6 views
5

J'essaie d'utiliser Moq 3.x, cela fonctionne superbement. Cependant, j'ai un problème que je n'arrive pas à résoudre. Compte tenuMoq avec l'argument Action

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

Je cherche les suivantes:

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)); 

Mon problème est que tout appel à passingTestSpec.Object.Run (... une action ...) retourne false. Il semble que la bibliothèque Moq essaie de faire correspondre l'action à l'argument que j'ai passé à Run() dans l'appel Setup(), et échoue. Peu importe l'action que j'ai mise dans l'appel Run() ... elle retourne toujours false.

Des idées?

[Modifier] Je viens de découvrir quelque chose; si je remplace la ligne d'installation par

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

le test passe. Cependant, je ne peux pas savoir à quelle action la méthode .Run() sera appelée, donc ce n'est pas une solution. Quelqu'un connaît-il un équivalent It.IsAny pour les actions?

Répondre

13

Quel est le problème avec:

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

LOL Je connais quelqu'un va trouver la solution ... de penser que j'ai perdu plusieurs heures sur ce :(Merci, je vais avec cela, il vaut mieux que la mienne. –