【发布时间】:2015-12-02 14:41:24
【问题描述】:
我正在创建一个单元测试,使用 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);
安装程序(例如 .. 给出“不明确的调用”编译错误。
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);
}
}
谁能告诉我应该/可以怎么做?
【问题讨论】:
-
您能否将
RequestClass的定义添加到您的问题中? -
我明天可以添加,但它实现了 IMessage。它有一个与 LogCheck 匹配的 Log 方法 它有一个与 SendCheck 参数匹配的 send 方法,但返回不是 void。你还想知道什么?
-
我只想要整个画面。您还说错误消息提到了
SendAndListen;您也可以添加该方法的签名吗? -
抱歉 send 和 sendandlisten 是同一个方法,我只是不想泄露我正在处理的实际代码
-
已更新以包含所有类和详细信息。
标签: c# .net unit-testing nunit moq