2010-07-28 12 views
4

J'ai une interface comme ceci:Test d'une méthode appelée plusieurs fois dans moq

Interface IWriteFile { 
    string FileName {get;set;} 
    void Open(); 
    void WriteData(string dataToWrite); 
    void Close(); 
} 

Je veux tester une classe qui utilisera cette interface pour remplir un fichier. Il appellera WriteData plusieurs fois et je veux juste tester la sortie finale. Y at-il un moyen d'introduire un nouveau champ privé à l'objet Mock qui sera ajouté à chaque fois que WriteData (Data) est appelé? Je veux vraiment juste voir à quoi ressemblera le fichier à la fin de la journée. Y a-t-il une meilleure approche à cela?

Répondre

8

Alors, avez-vous besoin d'une sorte de compte du nombre de fois où il est appelé?

int count = 0; 
List<string> items = new List<string>(); 
var mock = new Mock<IWriteFile>(); 
mock.Setup(m => m.WriteData(It.IsAny<string>())) 
    .Callback((string data) => { items.Add(data); count++; }); 
+1

+1. C'est bien. Je commence vraiment à aimer Moq. – fletcher

+0

pas un nombre .. mais cela va fonctionner ... au lieu d'incrémenter un int, je dois ajouter à une chaîne .. parfait .. merci ... Moq + Nunit sauve encore ma santé mentale – Rob