2010-10-02 13 views
3

J'ai utilisé le framework Moq dans C# pour se moquer des tests unitaires mais il y a une chose que je ne comprends pas encore. J'ai cette ligne de codeNewbie question sur moquette et moq framework

var feedParserMock = new Mock<ApplicationServices.IFeedParser>(); 
feedParserMock.Setup(y => y.ParseFeed(csv)).Returns(items).Verifiable(); 

La deuxième ligne que cela signifie qu'il ne retourne la valeur si le paramètre passé est le même? parce que le paramètre que je passe à ParseFeed à l'intérieur de mon contrôleur est construit à l'intérieur du contrôleur et je n'ai pas accès à lui dans le test unitaire. Actuellement, la méthode renvoie null, est-il possible de spécifier que je veux retourner la variable de mes éléments quel que soit le paramètre?

Répondre

7

Oui. Moq fournit la classe statique It qui a des méthodes auxiliaires pour spécifier les paramètres qui satisfont certains critères. Votre exemple pourrait être:

feedParserMock.Setup(y => y.ParseFeed(It.IsAny<string>())).Returns(items).Verifiable(); 

Ensuite Moq correspondra à votre configuration, étant donné que le paramètre est du type spécifié et non nul (j'ai choisi chaîne ici, vous devez bien sûr remplacer par le type correct de votre paramètre pour que le code compile).

Vous pouvez également transmettre un délégué que Moq évaluera afin de déterminer si l'installation correspond. Exemple:

feedParserMock.Setup(y => y.ParseFeed(It.Is<string>(s => s.Length > 3)); 

Cela correspond à aucun invocations de méthode sur ParseFeed, où le paramètre est une chaîne avec une section longueur supérieure à 3.

Vérifiez la « contrepartie des arguments » du Moq Quickstart guide pour en savoir plus.

+0

'C'est ici que ça se passe. Les arguments correspondants sont l'une de mes caractéristiques préférées de Moq. –

2

Oui, vous pouvez utiliser It.IsAny()

par exemple

feedParserMock.Setup(y => y.ParseFeed(It.IsAny<string>())).Returns(items).Verifiable();