c#中捕获方法返回值的问题

本文关键字:返回值 问题 方法 | 更新日期: 2023-09-27 18:18:25

我需要模拟一个方法以及它的返回值,这是一个对象。下面是我在主类

中的代码
//**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方法,但消息变量仍然为空。当我在

下面的setup方法中编写Return语句时,为什么它是空的?
_mockCorrelationMessageClient.Setup(x =>
   x.GetCorrelationMessage(correlationMessageFix.CorrelationId, 
        correlationMessageFix.CorrelationMessageType))
       .Returns(correlationResponse);

c#中捕获方法返回值的问题

看起来你正在使用Moq。在这种情况下,方法的实际调用的参数需要匹配您在.Setup方法中使用的参数,或者您可以允许任何/特定的匹配函数。例如,It.IsAny<T>允许特定参数的所有值:

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

否则,您将获得方法的默认实现,该方法将返回结果类型的默认值(引用类型为空)。

请注意,您应该在.Setup中内联调用It.IsAny -将它传递给它的isany()和它的值isany()之间的区别是什么