我需要模拟一个方法以及它作为对象的返回值。下面是我在主类中的代码
//**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);
当我调试Main Class代码时,我看到传递给GetCorrelationMessage方法的值但消息变量仍然为null。当我在下面的设置方法中编写一个Return语句时,为什么它为null
_mockCorrelationMessageClient.Setup(x =>
x.GetCorrelationMessage(correlationMessageFix.CorrelationId,
correlationMessageFix.CorrelationMessageType))
.Returns(correlationResponse);
答案 0 :(得分:0)
看起来你正在使用Moq。在这种情况下,方法&#39;实际调用的参数需要匹配您在.Setup
方法中使用的一次,或者您可以允许任何/特定匹配函数。即It.IsAny<T>
允许特定参数的所有值:
_mockCorrelationMessageClient.Setup(x =>
x.GetCorrelationMessage(It.IsAny<TypOfId>(), It.IsAny<TypeOfMessageType>()))
.Returns(correlationResponse);
否则,您将获得方法的默认实现,该方法将返回结果类型的默认值(引用类型为null)。
请注意,您应该It.IsAny
- What is the difference between passing It.IsAny<int>() and the value of It.IsAny<int>() to a method setup内联.Setup
。