J'apprends le développement piloté par les tests et j'essaie d'utiliser la bibliothèque Moq pour se moquer. Quel est le but de la méthode d'installation de la classe Mock?
Le comportement par défaut d'un objet Moq Mock
est de bloquer toutes les méthodes et propriétés. Cela signifie qu'un appel à cette méthode/propriété avec tous les paramètres n'échouera pas et renverra une valeur par défaut pour le type de retour particulier.
Vous appelez la méthode Setup
pour tout ou partie des raisons suivantes:
public interface ICalculator {
int Sum(int val1, val2);
}
var mock = new Mock<ICalculator>();
mock.Setup(m=>m.Sum(
It.IsAny<int>(), //Any value
3 //value of 3
));
La configuration ci-dessus correspondra à un appel à la méthode Sum
avec n'importe quelle valeur pour val1
Et val2
Valeur de 3.
ICalculator
, la configuration suivante renverra une valeur de 10 quels que soient les paramètres d'entrée:var mock = new Mock<ICalculator>();
mock.Setup(m=>m.Sum(
It.IsAny<int>(), //Any value
It.IsAny<int>() //Any value
)).Returns(10);
Mock<T>.VerifyAll()
après avoir effectué les configurations pour vérifier que toutes les configurations précédentes ont été appelées (une fois).var mock = new Mock<ICalculator>();
mock.Setup(m=>m.Sum(
7, //value of 7
3 //value of 3
));
mock.Setup(m=>m.Sum(
5, //value of 5
3 //value of 3
));
mock.VerifyAll();
Le code ci-dessus vérifie que Sum
est appelé deux fois. Une fois avec (7,3)
Et une fois avec (5,3)
.
La méthode de configuration est utilisée pour définir les attentes sur l'objet factice. Par exemple:
mock.Setup(foo => foo.DoSomething("ping")).Returns(true);
Ici, vous définissez la méthode DoSomething
sur un objet factice. Vous dites, lorsque le paramètre est "ping", la méthode renvoie true.
Maintenant, cet objet peut en outre servir de maquette ou de talon en fonction de votre utilisation. Si vous souhaitez l'utiliser dans des tests basés sur un état, il peut agir comme un stub. Si vous souhaitez l'utiliser dans des tests basés sur le comportement, il peut servir de maquette. Dans les tests de comportement, vous appellerez la méthode verify sur l'objet fictif pour affirmer que la méthode a été appelée avec le paramètre "ping"
Reportez-vous également à ces liens: