moq 带有模板参数的方法

moq a method with a template parameter

我正在创建一个单元测试,使用 moq.Mock class 来模拟这种情况。 我想用模板参数模拟一个方法,这样我就可以检查发送给它的是什么。

mockGateway = new Mock<GatewayClass>();

//this one works
mockGateway.Setup(e => e.Log(It.IsAny<LogLevel>(), It.IsAny<Exception>(), It.IsAny<string>(), It.IsAny<object[]>()))
            .Callback<LogLevelClass, Exception, string,object[]>(LogCheck);

//this one doesnt work
mockGateway.Setup(e => e.Send<RequestClass>(It.IsAny<RequestClass>()))
            .Callback<RequestClass>(SendCheck);

安装程序(例如..给出了一个'Ambiguous invocation'编译错误。

RequestClass 给出编译错误“类型必须可转换为 IMessage 才能用作通用发送中的参数 TMessage, 但 RequestClass 实现了 IMessage,但查看时的元数据并未显示这一点。 因为我在不同的解决方案中对其定义的解决方案进行测试。

private void LogCheck(LogLevel level, Exception ex, string str, object[] paramObjs)
{
    //do something...
}

private void SendCheck<TMessage>(TMessage message)
    where TMessage : class, IMessage,IRequestMessage, new()
{
    //do something...
}

public class RequestClass: IMessage, IRequestMessage
{
    public RequestClass();
    ...other methods..
}

public class GatewayClass : IGateway
{
    public ISynchronousRequestResult<ResultResponse> Send<TMessage>(TMessage message)
        where TMessage : class, IMessage,IRequestMessage, new()
    {
        return service.Send<ResultResponse,TMessage>(message);
    }
}

任何人都可以告诉我这个 should/could 是如何完成的吗?

检查多个 IMessage。

我发现我引用了一个不是我自己的 Microsoft IMessage。