【问题标题】:Moq returning an object from a methodMoq 从方法返回对象
【发布时间】:2016-08-03 16:24:04
【问题描述】:

我有以下单元测试,我正在使用 MOQ 设置从类返回的对象。但是,当我尝试引用 mock.Object 时,它引用的是接口类型而不是我试图返回的类型

var throughFareIdentifer = new ThoroughfareNumberIdentifier();

var throughfareMock = new Mock<ILLUSiteInformation>();
 throughfareMock.Setup(x => x.GetThroughfareNumber("15")).Returns(throughFareIdentifer);


var siteInformation = _lluSiteInformation.GetSiteDetails("", "", "", "", "", "", "", "", throughfareMock.Object);

throughfareMock.Object 应该是 ThroughfareNumberIdentifier 而不是 IlluSiteInformation。

对此的任何帮助将不胜感激

谢谢

克里斯

【问题讨论】:

标签: c# unit-testing moq


【解决方案1】:

它正在做你告诉它做的事情。通过创建new Mock&lt;ILLUSiteInformation&gt;();,您是在说“给我一个ILLUSiteInformation 类型的Mock”。

当您使用您的设置时:

throughfareMock.Setup(x => x.GetThroughfareNumber("15")).Returns(throughFareIdentifer);

您是说“当调用 GetThroughfareNumber 并将数字 15 作为字符串传递时,返回 throughFareIdentifier”。

调用throughfareMock.Object.GetThroughfareNumber(),而不是像这样使用模拟对象

_lluSiteInformation.GetSiteDetails("", "", "", "", "", "", "", "", throughfareMock.Object.GetThroughfareNumber("15");

确保您只使用数字 15 作为字符串(因为这是您设置的)。如果要使用任何字符串,请调用

throughfareMock.Setup(x => x.GetThroughfareNumber(It.IsAny<string>)).Returns(throughFareIdentifer);

如果你想使用 int

throughfareMock.Setup(x => x.GetThroughfareNumber(It.IsAny<int>)).Returns(throughFareIdentifer);

【讨论】:

  • 谢谢。如果我使用 throughfareMock.Object.GetThroughfareNumber(),是否需要进行设置?谢谢
  • 这取决于你。这取决于您如何使用throughfareMock 对象以及您打算用它做什么。通常,当我使用 Mocks 时,我将 Mock.Object 传递给对象的构造函数,获取一个接口,它将使用接口的方法。就像你在那里一样。我一般不会在我的测试代码中调用 Mocked 对象的方法。这是你的电话
  • 谢谢。对不起,我有点困惑。我现在在构造函数中使用了 throughfareMock.Object.GetThroughfareNumber("15") 并且工作正常。正如我在其他示例中发现的那样,为什么要设置从方法获取返回类型。我想尽量避免在方法调用中调用方法。谢谢
  • 我不关注。那里没有构造函数......你只在GetSiteDetails中使用它。
  • 在这里,加入这个聊天,这样我们就不会污染问题:chat.stackoverflow.com/rooms/119032/moq
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-05
  • 2015-12-14
  • 1970-01-01
  • 2020-08-13
相关资源
最近更新 更多