【问题标题】:Mock method that returns Task<dynamic>返回 Task<dynamic> 的模拟方法
【发布时间】:2020-11-12 18:53:26
【问题描述】:

我对返回动态的方法进行了单元测试,当我尝试设置并返回动态值时,它在运行测试时出现错误提示

“Moq.etc”的最佳重载方法匹配有一些无效参数

_managerMock.Setup(x => x.someMethod(It.IsAny<int>()))
            .Returns(Task.FromResult(resource));

【问题讨论】:

  • 什么是资源?还要显示被模拟的内容的定义以及在测试中如何使用它

标签: c# unit-testing mocking task moq


【解决方案1】:

你有两个选择:

带变量

如果您的resource 变量未声明为dynamic,那么您不需要任何特殊的东西。您所需要的只是旧的ReturnsAsync。 (请选择ReturnsAsync 而不是ReturnsTask.FromResult

var resource = new {Id = 1};
_managerMock.Setup(mgr => mgr.SomeMethod(It.IsAny<int>()))
    .ReturnsAsync(resource);

在这个示例中,我创建了一个匿名类型,但你可以使用任何你想要的类型。

带动态

如果您将resource 声明为动态,则需要使用ReturnsAsync 的另一个重载。您需要指定valueFunction,而不是指定返回value

dynamic resource = new {Id = 1};
_managerMock.Setup(mgr => mgr.SomeMethod(It.IsAny<int>()))
    .ReturnsAsync(() => resource);

在这个示例中,我创建了一个匿名 lambda,但你可以使用任何你想要的东西。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-12
    • 2016-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-30
    相关资源
    最近更新 更多