2009-06-03 27 views
5

我正在嘗試使用StructureMap自帶的MoqAutoMocker類,但找不到應該如何使用它的任何示例。我所要做的就是example at the StructureMap site that uses RhinoMocks如何使用StructureMap 2.5.3附帶的MoqAutoMocker?

我想要做的是使用Get方法獲取對自動模擬/注入依賴關係之一的引用。根據上面的鏈接,我應該可以做這樣的事情

// This retrieves the mock object for IMockedService 
    autoMocker.Get<IMockedService>().AssertWasCalled(s => s.Go()); 

說明了如何使用AssertWasCalled,這inidcates,get函數返回RhinoMocks模擬對象的引用?當我使用MoqAutoMocker時,同樣的代碼不適用於我。

我有一個SignInController類,它依賴於構造函數中的ISecurityService。使用像RhinoAutoMocker的MoqAutoMocker在本例中使用,我想我應該能夠做到這一點...

var autoMocker = new MoqAutoMocker<SignInController>(); 
autoMocker.Get<ISecurityService>().Setup(ss => ss.ValidateLogin 
(It.IsAny<string>(), It.IsAny<string>())).Returns(true); 

但問題是,我從來沒有訪問設置方法。在這種情況下,對autoMocker.Get的調用似乎返回ISecurityService的一個實例,而不是模擬<ISecurityService>

有沒有人成功使用MoqAutoMocker這種方式?我只是做錯了嗎?

+0

我有完全相同的問題。你弄明白了嗎? – Sunit 2009-09-02 20:10:35

回答

10

我最近遇到了一個類似問題。看來,解決的辦法是做這樣的事情:

var autoMocker = new MoqAutoMocker<SignInController>(); 
var mock = autoMocker.Get<ISecurityService>(); 
Mock.Get(mock).Setup(ss => ss.ValidateLogin 
(It.IsAny<string>(), It.IsAny<string>())).Returns(true); 

我也貼在我的博客一個更長的例子:Setting Expectations With StructureMap’s MoqAutoMocker

+0

你搖滾。這對我有效。在我看到這個之前,我放棄了使用AutoMocker。謝謝! – JamieGaines 2010-02-23 20:26:12

1

autoMocker.Get<ISecurityService>()
將返回ISecurityService,您無法在其上進行設置。相反
Mock.Get(mock)
將返回Moq.Mock,然後你可以安裝它。