如何使用Mock回调从void方法返回值
在我的单元测试中,我必须模拟调用DB write call方法。此方法属于void类型,但对于我的测试断言,我需要验证传递给此方法的其中一个参数。 有没有办法在模拟设置上返回此参数?
这是我的代码。
public virtual void InsertOrUpdateBrewedEntity(RawDataLeaf theRawData, //this parameter i want to check for assertion
XsdInfo allXsdInfo = null,
DbWritingActionCode actionCode = DbWritingActionCode.I,
Dictionary<string, string> dataIdMap = null,
Action<string, RawDataLeaf> testActionToDoInsteadOfWriting = null,
string transactionName = null,
bool skipValidationEvenForTypesThatCantSaveIfNotValid = false,
bool disableExtraSqlForXsdType = false,
string nameOverride = null)
{
//code
}
所以我想在模拟方法设置上获得RawDataLeaf theRawData对象的值。
以下是我如何设置此模拟方法调用。
_xmlCupboardWriteAccess.Setup(x => x.InsertOrUpdateBrewedEntity(It.IsAny<RawDataLeaf>(),
It.IsAny<XsdInfo>(),
It.IsAny<DbWritingActionCode>(),
It.IsAny<Dictionary<string, string>>(),
It.IsAny<Action<string, RawDataLeaf>>(),
It.IsAny<string>(),
It.IsAny<bool>(),
It.IsAny<bool>(),
It.IsAny<string>()));
答案 0 :(得分:0)
听起来您只是在验证方法是否使用特定值调用,因此请在It.Is<>
调用中使用Verify
:
_xmlCupboardWriteAccess.Verify(x => x.InsertOrUpdateBrewedEntity(
It.Is<RawDataLeaf>(actualRawDataLeaf => /* your equality test */),
It.IsAny<XsdInfo>(),
// ... etc
答案 1 :(得分:0)
moq.Verify()将为您完成这项工作。
https://github.com/Moq/moq4/wiki/Quickstart
//至少调用一次 mock.Verify(foo =&gt; foo.Execute(“ping”),Times.AtLeastOnce());