如何使用Mock设置从void方法返回值

时间:2014-02-20 21:06:31

标签: c# unit-testing moq

如何使用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>()));

2 个答案:

答案 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());