Moq ReturnAsync无法将Lambda表达式转换为类型“ Foo”,因为它不是委托类型

问题描述

我正在尝试设置一个模拟返回,该返回返回传递给它的参数。

我要模拟的方法签名:

public async Task<Foo> SendFoo(Foo foo)

我如何模拟它:

var mock = new Mock<FooClient>();
mock.SetupSequence(m => m.SendFoo(It.IsAny<Foo>())).ReturnsAsync<Foo>(foo => Task.Fromresult(foo));

我收到以下错误消息:“ 无法将lambda表达式转换为类型'Foo',因为它不是委托类型”。

我在做什么错了?

解决方法

通过FooClient上的界面,我可以运行该

public interface IFooClient
{
    Task<Foo> SendFoo(Foo foo);
}

public class FooClient
{
    public async Task<Foo> SendFoo(Foo foo)
    {
        return new Foo();
    }
}

和测试

    [Test]
    public async Task Test()
    {
        var fooInTest = new Foo();
        var mock = new Mock<IFooClient>();
        mock.SetupSequence(m => m.SendFoo(fooInTest)).Returns(() => Task.FromResult(fooInTest));

        var result = await mock.Object.SendFoo(new Foo());
        Assert.NotNull(result);
        Assert.IsTrue(result is Foo);
    }

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...