Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# moq是一种带有模板参数的方法_C#_.net_Unit Testing_Nunit_Moq - Fatal编程技术网

C# moq是一种带有模板参数的方法

C# moq是一种带有模板参数的方法,c#,.net,unit-testing,nunit,moq,C#,.net,Unit Testing,Nunit,Moq,我正在使用moq.Mock类创建一个单元测试来模拟这种情况。 我想用一个模板参数模拟一个方法,这样我就可以检查发送给它的内容 mockGateway = new Mock<GatewayClass>(); //this one works mockGateway.Setup(e => e.Log(It.IsAny<LogLevel>(), It.IsAny<Exception>(), It.IsAny<string>(), It.IsAny

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

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);
mockGateway=newmock();
//这个有效
mockGateway.Setup(e=>e.Log(It.IsAny(),It.IsAny(),It.IsAny(),It.IsAny())
.回调(日志检查);
//这个不行
mockGateway.Setup(e=>e.Send(It.IsAny()))
.回拨(SendCheck);
设置(e..给出了一个“不明确调用”编译错误

RequestClass给出了一个编译错误“该类型必须可转换为IMessage,才能在generic send中用作参数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);
    }
}
private void日志检查(日志级别、异常ex、字符串str、对象[]paramObjs)
{
//做点什么。。。
}
专用void SendCheck(TMessage消息)
其中TMessage:class、IMessage、IRequestMessage、new()
{
//做点什么。。。
}
公共类RequestClass:IMessage、IRequestMessage
{
公共请求类();
…其他方法。。
}
公共类网关类:IGateway
{
公共ISynchronousRequestResult发送(TMessage消息)
其中TMessage:class、IMessage、IRequestMessage、new()
{
返回服务。发送(消息);
}
}

有人能告诉我应该/可以怎么做吗?

检查多重IMessage


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

你能在你的问题中添加
RequestClass
的定义吗?我明天可以添加,但它实现了IMessage。它有一个与LogCheck匹配的Log方法,它有一个与SendCheck参数匹配的send方法,除了返回不是无效的之外。你还会做什么想知道吗?我只是想知道全部情况。你还说错误消息提到了
sendandsealt
;你能不能也添加该方法的签名?很抱歉,send和sendandsealt是同一个方法,我只是试图不泄露我正在更新的实际代码,以包括所有类和详细信息。