2015-10-19 47 views
-1

我需要模擬一個方法以及它的返回值,它是一個對象。下面是我在主類嘲笑+ C#中捕獲方法的返回值問題#

//**Main Class** 
var message = CorrelationMessageClient.GetCorrelationMessage(
     orderRequest.OrderId, CorrelationMessageType.CorrelationFix); 
if (message != null && !string.IsNullOrEmpty(message.CorrelationId)) 
{ 
     sendOrderResponse = PrepareExecutionReport(
       new MessageManager(message.ResponseMessage)); 
} 

CorrelationMessageClient.GetCorrelationMessage的返回類型爲類型CorrelationMessage對象的代碼。

在我的單元測試我已經嘲笑如下

//**Unit Test class** 
private Mock<ICorrelationMessageClient> _mockCorrelationMessageClient; 
_mockCorrelationMessageClient = new Mock<ICorrelationMessageClient>(); 

var correlationResponse = new CorrelationMessage { 
    CorrelationId = "1212121",ResponseMessage = "Response Successful"}; 

_mockCorrelationMessageClient.Setup(x => 
    x.GetCorrelationMessage(correlationMessageFix.CorrelationId, 
     correlationMessageFix.CorrelationMessageType)) 
     .Returns(correlationResponse); 

當調試主類代碼,我看到被傳遞給GetCorrelationMessage方法的值,但該消息變量保持爲空。爲什麼當我在下面的設置方法中寫回Return語句時,它爲空

_mockCorrelationMessageClient.Setup(x => 
    x.GetCorrelationMessage(correlationMessageFix.CorrelationId, 
     correlationMessageFix.CorrelationMessageType)) 
     .Returns(correlationResponse); 

回答

0

看起來像您正在使用Moq。在這種情況下,方法的實際調用參數只有在.Setup方法中使用時才需要匹配,或者您可以允許任何特定的匹配函數。即It.IsAny<T>允許特定的參數值都:

_mockCorrelationMessageClient.Setup(x => 
    x.GetCorrelationMessage(It.IsAny<TypOfId>(), It.IsAny<TypeOfMessageType>())) 
    .Returns(correlationResponse); 

否則你會得到默認的實現方法,將返回默認值結果類型(空引用類型)的。

請注意,您應該致電It.IsAny內嵌.Setup - What is the difference between passing It.IsAny<int>() and the value of It.IsAny<int>() to a method setup