2010-12-19 17 views
0

我試圖測試我的控制器,但它們中的每一個都對依賴於存儲庫的服務有依賴性。我有以下代碼...AutoMocker問題

Mock.Get(controller.Get<ServiceInterface>()) 
      .Setup(s => s.GetData()) 
      .Returns(FakeData.Create<Entity>(25)); 

我不斷收到有關serviceInterface等具體類不必爲它的存儲庫的默認實例錯誤(注入)。我試圖避免創建一個FakeService,但它看起來就是我所要做的。誰能提供一些建議?

回答

0

你想要測試哪些類以及你想要測試哪些類?我猜想你正在嘗試測試你的控制器,並想要將你的服務存檔。如果是這樣的話,你的服務的具體實現以及它的依賴關係不應該參與你的測試,而應該是不相關的。您只需要將測試控制器所需的服務接口的行爲截斷即可。

我只是在猜測你的意圖,所以如果我的回答沒有意義,你可能需要發佈更多的代碼來顯示你正在測試的東西。

+0

我控制器對我的服務注入依賴,和我的服務有一個依賴注入在存儲庫上。我試圖嘲笑我的服務,所以我可以注入它,但我遇到的問題是當我試圖嘲笑我的服務時,我得到一個與AutoMocker相關的錯誤,無法將模擬庫注入到模擬服務中。希望這解釋多一點。 – jsteve81 2010-12-21 05:14:36

+0

這真的沒有道理。如果您的控制器依賴於服務接口,並且控制器不直接依賴存儲庫接口,那麼當您模擬服務接口時,NOTHING應該依賴於存儲庫,在這種情況下,它不應該顯示在您的測試中。您是否在測試設置中使用存儲庫接口?你的FakeData類是否使用它? – 2010-12-25 03:34:52

1

My response to this question顯示瞭如何編程您的服務以實現接口,將該接口用作依賴項,然後模擬該服務以幫助您進行單元測試。

編輯

不是有過與MoqAutoMocker任何經驗,我的建議是比較有限的。但是我會先嚐試直接使用Moq,看看是否會給您帶來麻煩。

var serviceMock = new Mock<IService>(); 
serviceMock.Setup(r => r.GetData()) 
    .Returns(FakeData.Create<Entity>(25)); 
var controller = new MyController(serviceMock.Object); 

一旦你確保這個工程,你可以介紹它的自動嘲諷方面:

var autoMocker = new MoqAutoMocker<MyController>(); 
Mock.Get(autoMocker.Get<IService>()).Setup(r => r.GetData()) 
    .Returns(FakeData.Create<Entity>(25)); 
MyController controller = autoMocker.ClassUnderTest; 
+0

感謝Stripling ...我的服務已經實現了一個接口。有關更多信息,請參閱第二個答案的評論。 – jsteve81 2010-12-21 05:15:49

+0

@jsteve:你的控制器是依賴於服務接口還是具體的類?如果你的構造函數指定它使用接口,AutoMock似乎不太可能知道具體類的依賴關係。 – StriplingWarrior 2010-12-21 18:16:59

+0

服務接口 – jsteve81 2010-12-22 15:46:29