var storageManager = new Mock<IStorageManager>();
storageManager.Setup(e => e.Add(It.IsAny<UserMetaData>()));
Add()メソッドは、FirstNameプロパティを持つUserMetaDataオブジェクトを想定しています。
「FirstName1」というFirstNameを持つUserMetaData型のオブジェクトが渡されたことを確認したいと思います。
Verify
を使用できます。
例:
Add
でUserMetaData
が呼び出されたことがないことを確認しますFirstName
!= "FirstName1"
で:
storageManager.Verify(e => e.Add(It.Is<UserMetaData>(d => d.FirstName!="FirstName1")), Times.Never());
Add
でUserMetaData
が少なくとも1回呼び出されたことを確認しますFirstName
== "FirstName1"
で:
storageManager.Verify(e => e.Add(It.Is<UserMetaData>(d => d.FirstName=="FirstName1")), Times.AtLeastOnce());
Add
がFirstName
== "Firstname1"
およびLastName
== "LastName2"
で1回だけ呼び出されたことを確認します。
storageManager.Setup(e => e.Add(It.Is<UserMetaData>(data => data.FirstName == "FirstName1"
&& data.LastName == "LastName2")));
...
storageManager.VerifyAll();
It.Isメソッドを使用できます:
storageManager.Setup(e => e.Add(It.Is<UserMetaData>(data => data.FirstName == "FirstName1")));
Dominic Kexelの方法は優れており、機能します。また、コールバックを使用することもできます。これは、より複雑な出力のチェックを行う必要がある場合に便利です。
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
これの利点は、必要に応じて、単に「FirstName1」であることを確認するのではなく、パラメーターに対してさらに多くの確認を実行できることです。
欠点は、Addが複数回呼び出された場合、最後の呼び出しで渡されたパラメーターのみがチェックされることです(追加で1回呼び出されたことを確認できます)。
ドミニクの答えはあなたの正確な状況では私のものよりも優れていますが、他の同様の状況ではコールバックを指摘したかったです。