2011-11-28 29 views
1

我不確定如何使用Ninject在我的單元測試中自動解析我的控制器的構造函數依賴項。解決Asp.Net MVC中的控制器構造函數依賴關係Ninject的單元測試

在我的實際應用中我已經安裝我的依賴注入在我gloabl.asax如下:

public void SetupDependencyInjection() 
    { 
     IKernel kernel = new StandardKernel(); 

     kernel.Bind<ISomeService>().To<SomeService>(); 

     DependencyResolver.SetResolver(new NinjectDependencyResolver(kernel)); 
    } 

我有一個構造函數位指示:

public SomeController (ISomeService someService) 

這一切工作正常,不知何故神奇地SomeController構造函數被調用someService作爲參數。我不知道如何在單元測試中複製這種行爲。也就是說,我想配置我的unittests,這樣我就不必通過構造函數自己創建我的控制器了 - 我想讓ninject以與實際應用程序中的方式完全相同的方式執行此操作。

感謝您提前提供任何幫助!

回答

0

我不知道我怎麼會在我的單元測試複製這種行爲雖然

在你的單元測試,你可以使用模擬框架,如Rhino MocksMoq來生成你的依賴mock對象和定義他們的期望。

例與犀牛嘲笑:

[TestMethod] 
public void Test_Something() 
{ 
    // arrange 
    var serviceMock = MockRepository.GenerateStub<ISomeService>(); 
    serviceMock.Stub(x => x.SomeMethod(123)).Return("foo bar"); 
    var sut = new SomeController(serviceStub); 

    // act 
    var actual = sut.SomeAction(); 

    // assert 
    // TODO: assert on the result 
} 
+0

感謝回答,但這並不是真正的我是什麼意思。我想完全擺脫手動調用「new SomeController(serviceStub);」我想複製MVC DependencyResolver(使用NinjectDependencyResolver)正在做什麼來解決依賴關係。 – bplus

+0

@bplus,你不要在單元測試中這樣做。我認爲你孤立地忽略了應用程序的單元測試層。如果你在你的單元測試中使用了一個依賴解析器,你將基本上注入你的控制器的具體實現,使得你正在嘗試單元測試和你的應用程序的其他層次之間有很強的耦合,這是你在單元測試中不應該做的事情。在單元測試中,你想完全控制被測主題的依賴關係。這就是爲什麼你使用模擬框架。 –

相關問題