Moq-It.IsAny () toujours retourner null
ce qui peut causer It.IsAny<string>()
pour retourner null à chaque appel? Est-ce que je me trompe en présumant qu'il est conçu pour retourner une chaîne non-null?
Voici l'usage - où la méthode Login lance une ArgumentNullException pour un argument nul 2nd (chaîne de connexion). J'ai été en supposant que It.IsAny<string>()
fournirait une chaîne non-null, qui contournerait L'ArgumentNullException.
var mockApiHelper = new Mock<ApiHelper>();
mockApiHelper.Setup(m => m.Connect(It.IsAny<string>(),
It.IsAny<string>(),
It.IsAny<string>()));
var repositoryPlugin = new RepositoryPlugin(mockApiHelper.Object);
repositoryPlugin.Login(new CredentialsInfo(), It.IsAny<string>());
Assert.IsTrue(repositoryPlugin.LoggedIn,
"LoggedIn property should be true after the user logs in.");
3 réponses
Eh bien,It.IsAny<TValue>
retourne le résultat de l'appel à Match<TValue>.Create
- qui à son tour renvoie default(TValue)
. Ce sera null pour tout type de référence.
il n'est pas clair si vous l'appelez vraiment sur le bon objet cependant - ne devriez-vous pas l'appeler sur le faux plutôt que sur le code réel?
Tous les échantillons que j'ai vu utiliser It.IsAny
dans le cadre d'un mock.Setup
appel. Pourriez-vous donner plus d'informations sur la façon vous essayez de l'utiliser?
Non, Ça.IsAny est utilisé pour spécifier dans votre configuration que toute chaîne de caractères passée correspondra. Vous pouvez faire votre configuration de sorte que si votre méthode est appelée seulement avec une chaîne particulière, elle reviendra. Considérez ceci:
myMock.Setup(x => x.DoSomething(It.IsAny<string>()).Return(123);
myMock.Setup(x => x.DoSomething("SpecialString").Return(456);
Tout ce qui utilise le mock obtiendra alors des valeurs différentes selon le paramètre que le mock est passé lorsque DoSomething est invoqué. Vous pouvez faire la même chose en vérifiant les appels de méthode:
myMock.Verify(x => x.DoSomething(It.IsAny<string>())); // As long as DoSomething was called, this will be fine.
myMock.Verify(x => x.DoSomething("SpecialString")); // DoSomething MUST have been called with "SpecialString"
aussi, je vois que vous avez modifié votre question. Plutôt de:
Assert.IsTrue(repositoryPlugin.LoggedIn, "LoggedIn property should be true after the user logs in.");
faire ceci:
mockApiHelper.Verify( x => x.Connect(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>()), Times.Once()); // Change times to whatever you expect. If you expect particular values, replace the relevent It.IsAny<string() calls with those actual vaules.
It.IsAny
est utilisé pour correspondre à son code dans votre Returns()
et Callback()
ce contrôle ce qui est poussé dans vos tests.