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类型。

任何帮助,这将不胜感激

感谢

克里斯

+0

请提供[MCVE]与你实际的和预期的行为。这将用于帮助你解决你的问题。 – Nkosi

它做什么你告诉它做的事。通过创建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); 
+0

谢谢。如果我使用throughfareMock.Object.GetThroughfareNumber(),我的事件是否需要执行设置?谢谢 – chrisblue13

+0

这取决于你。这取决于你如何使用'throughfareMock'对象以及你打算如何使用它。通常当我使用Mocks时,我将'Mock.Object'传递给一个对象的构造函数,带上一个接口,它将使用接口的方法。很像你在那里。我通常不会在我的测试代码中调用Mocked对象的方法。这是你的电话 – Brandon

+0

谢谢。对不起,我有点困惑。我已经在构造函数中使用了throughfareMock.Object.GetThroughfareNumber(“15”),并且工作正常。正如我在其他例子中发现的那样,为什么要设置从方法中获取返回类型。我想尽量避免调用方法调用中的方法。谢谢 – chrisblue13