Moq返回一个方法的对象
我有以下的单元测试,我正在使用MOQ来设置从一个类返回的对象。然而,当我尝试引用mock.Object它引用的接口类型不是我试图返回Moq返回一个方法的对象
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类型。
任何帮助,这将不胜感激
感谢
克里斯
它做什么你告诉它做的事。通过创建new Mock<ILLUSiteInformation>();
,您的意思是“给我一个类型为ILLUSiteInformation
的模拟器”。
当您使用您的设置:
throughfareMock.Setup(x => x.GetThroughfareNumber("15")).Returns(throughFareIdentifer);
你说“当GetThroughfareNumber
被调用,并通过了15号作为一个字符串,返回throughFareIdentifier
”。
呼叫throughfareMock.Object.GetThroughfareNumber()
而不是使用Mock对象,像这样
_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(),我的事件是否需要执行设置?谢谢 – chrisblue13
这取决于你。这取决于你如何使用'throughfareMock'对象以及你打算如何使用它。通常当我使用Mocks时,我将'Mock.Object'传递给一个对象的构造函数,带上一个接口,它将使用接口的方法。很像你在那里。我通常不会在我的测试代码中调用Mocked对象的方法。这是你的电话 – Brandon
谢谢。对不起,我有点困惑。我已经在构造函数中使用了throughfareMock.Object.GetThroughfareNumber(“15”),并且工作正常。正如我在其他例子中发现的那样,为什么要设置从方法中获取返回类型。我想尽量避免调用方法调用中的方法。谢谢 – chrisblue13
请提供[MCVE]与你实际的和预期的行为。这将用于帮助你解决你的问题。 – Nkosi