【发布时间】:2014-02-20 21:06:30
【问题描述】:
如何使用 Mock 回调从 void 方法返回值
在我的单元测试中,我必须模拟对 DB 写入调用方法的调用。此方法是 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>()));
【问题讨论】:
-
你不能从 void 返回数据,这就是它的意思。您也许可以使用 out (msdn.microsoft.com/en-us/library/t3c3bfhx.aspx) 关键字。
-
@Bonzo 我希望有一个不需要我更改我正在模拟的方法签名的解决方案。作为 QA,我可以编写测试但不能更改已实现的代码。不过谢谢你的建议。
标签: c# unit-testing moq