MOQ错误设置与Async / Await Unit Test

时间:2016-05-13 16:17:53

标签: c# unit-testing asynchronous moq

我想知道我在这里缺少什么。我的测试运行正常但我的MOQ VerifyAll正在抛出异常。

[TestMethod]
public async Task ActionPlanDataProvider_GetActionPlanReferenceList_ReturnsValid()
{
    try
    {
        //Arrange
        Mock<IActionPlanDataProvider> moqAPlan = new Mock<IActionPlanDataProvider>();
        //moqAPlan.Setup(x => x.GetActionPlanReferenceList()).ReturnsAsync(new ActionPlanReferenceList());
        moqAPlan
            .Setup(x => x.GetActionPlanReferenceList("1"))
            .Returns(Task.FromResult(new ActionPlanReferenceList()));

        //Act
        var d = await moqAPlan.Object.GetActionPlanReferenceList("1234123");

        //Assert
        moqAPlan.VerifyAll();
    }
    catch (Exception ex)
    {
        string a = ex.Message;
        throw;
    }
}
  

以下设置未匹配......

我想知道这是不是因为异步运行的方式我的MOQ没有看到模拟的对象方法调用?

1 个答案:

答案 0 :(得分:2)

未使用安装程序时会发生这种情况。您将模拟设置为使用GetActionPlanReferenceList("1"),但调用GetActionPlanReferenceList("1234123")

所以根据moq你所执行的内容与你设置的内容并不匹配。

您可以匹配预期的参数或尝试

moqAPlan
    .Setup(x => x.GetActionPlanReferenceList(It.IsAny<string>()))
    .Returns(Task.FromResult(new ActionPlanReferenceList()));

将允许该方法接受任何字符串vai It.IsAny<string>()表达式参数