À l'aide de Moq pour définir l'une par une clé et une valeur
À la fin de la question:
À l'aide de Moq pour définir les indexeurs en C#, il y a un problème que quelqu'un a mis en évidence un problème que je vais avoir ainsi. Mais ils n'ont pas à trouver une solution.
Plus précisément, je suis en train d'utiliser le générique It.IsAny<string>
comme le matcher pour la clé et le réglage de la valeur par l'intermédiaire d' It.IsAny<object>
. Lors de l'accès via un index et le réglage de la valeur, il n'a jamais matches et il n'a pas accès à mon retour d'appel de la méthode. Et donc, mes tests unitaires ne sont pas.
var stateTable = new HashTable;
var httpSession = new Mock<HttpSessionStateBase>();
//works via httpSession.Add(key, value);
httpSession.Setup(x => x.Add(It.IsAny<string>(), It.IsAny<object>()))
.Callback((string index, object value) => {
var i = index;
var v = value;
stateData[i] = v;
});
//does not work via httpSession[key] = value;
httpSession.SetupSet(x => x[It.IsAny<string>()] = It.IsAny<object>())
.Callback( (string index, object value) => {
var i = index;
var v = value;
stateData[i] = v;
});
Je suis en utilisant Moq 4.0.10827
- Je pense que vous devriez préciser ce qu'est la question de cette question pour la rendre plus claire. Dans sa forme actuelle, il est difficile de deviner ce que la question est.
- Son problème, c'est que lorsque vous utilisez "Il.IsAny<string>" comme la valeur à l'intérieur de l'indexeur, il ne sera jamais de match.
- Exactement, et l'édition de post pour le rendre plus clair.
Vous devez vous connecter pour publier un commentaire.
Dans mon expérience, cela ne fonctionne jamais, vous ne pouvez pas l'utiliser.IsAny comme un matcher dans l'indexeur expression. Cependant, il correspond si vous mettez une valeur concrète dans l'indexeur.
Par exemple, le code suivant fonctionne:
C'est ce que j'ai fait pour vérifier la lecture.
pour le lit, je suis juste allé avec
Je ne l'aime pas mais j'ai réussi à le contourner en utilisant une nouvelle hérite de la classe.
J'ai ensuite remplacer l'indexeur et appelle une méthode virtuelle qui peut se moque de lui.
et la dérision se fait par :