var storageManager = new Mock<IStorageManager>();
storageManager.Setup(e => e.Add(It.IsAny<UserMetaData>()));
La méthode Add () attend un objet UserMetaData qui possède une propriété FirstName.
Je voudrais m'assurer qu'un objet de type UserMetaData avec le FirstName de "FirstName1" a été passé.
Vous pouvez utiliser Verify
.
Exemples:
Vérifiez que Add
n'a jamais été appelé avec un UserMetaData
avec FirstName
! = "FirstName1"
:
storageManager.Verify(e => e.Add(It.Is<UserMetaData>(d => d.FirstName!="FirstName1")), Times.Never());
Vérifiez que Add
a été appelé au moins une fois avec un UserMetaData
avec FirstName
== "FirstName1"
:
storageManager.Verify(e => e.Add(It.Is<UserMetaData>(d => d.FirstName=="FirstName1")), Times.AtLeastOnce());
Vérifiez que Add
a été appelé exactement une fois avec FirstName
== "Firstname1"
et LastName
== "LastName2"
:
storageManager.Setup(e => e.Add(It.Is<UserMetaData>(data => data.FirstName == "FirstName1"
&& data.LastName == "LastName2")));
...
storageManager.VerifyAll();
Vous pouvez utiliser la méthode It.Is:
storageManager.Setup(e => e.Add(It.Is<UserMetaData>(data => data.FirstName == "FirstName1")));
La méthode de Dominic Kexel est bonne et fonctionnera. Vous pouvez également utiliser le rappel, ce qui est utile si vous devez effectuer une vérification de la sortie plus compliquée.
UserMetaData parameter = null;
var storageManager = new Mock<IStorageManager>();
storageManager
.Setup(e => e.Add(It.IsAny<UserMetaData>()))
.Callback((UserMetaData metaData) => parameter = metaData);
Assert.That(parameter.FirstName, Is.EqualTo("FirstName1")); //If using fluent NUnit
L'avantage de cela est que, si nécessaire, vous pouvez effectuer beaucoup plus de contrôles sur le paramètre plutôt que de simplement vérifier qu'il s'agit de "FirstName1".
L'inconvénient est que si Add est appelé plusieurs fois, seul le paramètre transmis lors du dernier appel sera vérifié (bien que vous puissiez également vérifier qu'il a été appelé une fois).
La réponse de Dominic est meilleure que la mienne pour votre situation précise, mais je voulais signaler Callback pour d'autres situations similaires.