var storageManager = new Mock<IStorageManager>();
storageManager.Setup(e => e.Add(It.IsAny<UserMetaData>()));
Add() 方法需要一个具有 FirstName 属性的 UserMetaData 对象。
我想确保已经传递了 FirstName 为“FirstName1”的 UserMetaData 类型的对象。
var storageManager = new Mock<IStorageManager>();
storageManager.Setup(e => e.Add(It.IsAny<UserMetaData>()));
Add() 方法需要一个具有 FirstName 属性的 UserMetaData 对象。
我想确保已经传递了 FirstName 为“FirstName1”的 UserMetaData 类型的对象。
您可以使用Verify
.
例子:
验证Add
从未使用UserMetaData
with FirstName
!=调用过"FirstName1"
:
storageManager.Verify(e => e.Add(It.Is<UserMetaData>(d => d.FirstName!="FirstName1")), Times.Never());
使用with ==验证Add
至少调用了一次:UserMetaData
FirstName
"FirstName1"
storageManager.Verify(e => e.Add(It.Is<UserMetaData>(d => d.FirstName=="FirstName1")), Times.AtLeastOnce());
验证使用==和==Add
只调用过一次:FirstName
"Firstname1"
LastName
"LastName2"
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 被多次调用,那么只会检查最后一次调用中传递的参数(尽管您可以另外验证它是否被调用过一次)。
对于您的确切情况,多米尼克的回答比我的要好,但我想指出其他类似情况的回调。