2015-12-02 156 views
0

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

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 ..给出了一个“不明确调用”编译错误。

的RequestClass给出“的类型必须能够转换到一个消息对象,以便作为参数在使用TMessage一个编译错误通用发送, 但RequestClass实现即时聊天,但观看时元数据犯规显示此。 因为我在不同的解决方案,它在定义的解决方案做了测试。

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

能anyo你告诉我应该怎样做/可以做些什么?

+0

您可以将'RequestClass'的定义添加到您的问题中吗? –

+0

我明天可以添加,但是它实现了IMessage。 它有一个Log方法,与LogCheck 相匹配,它有一个与SendCheck参数相匹配的发送方法,但返回值不是无效的。 你还想知道什么? – f1wade

+0

我只想整个画面。你也说错误消息提到'SendAndListen';你可以添加该方法的签名吗? –

回答

0

检查多路IMessage的。

我发现我有一个微软IMessage不是我自己的参考。