C# moq是一种带有模板参数的方法
我正在使用moq.Mock类创建一个单元测试来模拟这种情况。 我想用一个模板参数模拟一个方法,这样我就可以检查发送给它的内容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
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是同一个方法,我只是试图不泄露我正在更新的实际代码,以包括所有类和详细信息。