2016-08-03 119 views
0

我有以下的單元測試,我正在使用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

回答

1

它做什麼你告訴它做的事。通過創建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