2015-12-02 159 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不是我自己的參考。