2010-05-24 10 views
1

j'ai fait le test suivant pour ma classe:moq questions fondamentales

var mock = new Mock<IRandomNumberGenerator>(); 
mock.Setup(framework => framework.Generate(0, 50)) 
    .Returns(7.0); 

var rnac = new RandomNumberAverageCounter(mock.Object, 1, 100); 
rnac.Run(); 
double result = rnac.GetAverage(); 
Assert.AreEqual(result, 7.0, 0.1); 

Le problème ici est que je changé d'avis sur ce que gamme de valeurs Generate(int min, int max) utiliseraient. Donc, dans Mock.Setup() j'ai défini la plage à partir de 0 to 50 tandis que plus tard j'ai appelé la méthode Generate() avec une plage de 1 to 100.

J'ai exécuté le test et il a échoué. Je sais que c'est ce qui est censé arriver mais je me suis demandé s'il n'y avait pas un moyen de lancer une exception ou de lancer un message en essayant d'exécuter la méthode avec de mauvais paramètres. De plus, si je veux exécuter cette méthode Generate() 10 fois avec des valeurs différentes (disons de 1 à 10), devrais-je faire 10 configurations simulées ou quelque chose, ou y a-t-il une méthode spéciale pour cela? ? Le mieux que je pouvais penser est ce (qui est pas mal, je demande simplement s'il y a d'autres mieux):

for (int i = 1; i < 10; ++i) { 
    mock.Setup(framework => framework.Generate(1, 100)) 
     .Returns((double)i); 
} 

Répondre

0

Avez-vous regardé le Moq QuickStart? Je suppose que vous voulez le mécanisme It.IsAny et/ou l'une des surcharges de retour avec laquelle vous fournissez une méthode lambda qui est appelée pour générer et/ou faire correspondre/valider des paramètres dans la méthode mockée.