如何使用参数模拟方法

时间:2015-06-25 17:29:44

标签: moq

我还在学习Moq,正在使用Moq编写单元测试:

    [TestMethod]
    public void ProcessFileRowQueue()
    {
        var mock = new Mock<EdiEntityManager>();
        mock.Setup(s => s.GetFileRowEntitiesToProcess()).Returns(GetMockFileRowEntities);
        var controller = new EdiController("LOCAL", mock.Object);
                    controller.ProcessFileRowQueue();
    }

这很有效。

现在,我想确保确保ProcessFileRowQueue()实际完成它的工作。在EdiManager上有一个我想模拟的方法,所以我可以拦截参数并检查它们并确保它们是正确的。

public virtual void SaveNewEdiDocument(EdiDocument ediDocument, Translation translation)...

但是,我没有看到如何使用参数模拟方法。

这就是我的想法:

mock.Setup(s => s.SaveNewEdiDocument(It.IsAny<EdiDocument>(), It.IsAny<Translation>()).Returns(ValidateResults));

我该如何写这个,或者我应该以不同的方式验证结果?

1 个答案:

答案 0 :(得分:0)

我找到了Callback方法:

    [TestMethod]
    public void ProcessFileRowQueue()
    {
        var mock = new Mock<EdiEntityManager>();
        mock.Setup(s => s.GetFileRowEntitiesToProcess()).Returns(GetMockFileRowEntities);
        mock.Setup(s => s.SaveNewEdiDocument(It.IsAny<EdiDocument>(), It.IsAny<Translation>()))
            .Callback<EdiDocument, Translation>(VerifyResult);
        var controller = new EdiController("LOCAL", mock.Object);

        controller.ProcessFileRowQueue();
    }

    public void VerifyResult(EdiDocument ediDocument, Translation translation)
    {

    }