moq一个带有模板参数的方法

时间:2015-12-02 14:41:24

标签: c# .net unit-testing nunit moq

我正在使用moq.Mock类创建一个Unit测试来模拟这种情况。 我想用模板参数模拟一个方法,以便我可以检查发送给它的内容。

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);

设置(e ..提供&#39;不明确的调用&#39;编译错误。

RequestClass给出了编译错误&#39; Type必须可转换为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);
    }
}

有谁可以告诉我应该/可以做什么?

1 个答案:

答案 0 :(得分:0)

检查多重IMessage。

我发现我提到了一个不属于我自己的微软IMessage。