![](/img/trans.png)
[英]How can I unit test my controller to make sure Windsor can resolve dependencies when using PerWebRequestLifestyle
[英]How can I unit test that Windsor can resolve Asp.net MVC3 controller dependencies?
目前我有溫莎控制器工廠,運作良好。 但是,我正在更改我的控制器並讓Windsor為控制器實例化更多數據。 我忘了更新我的Installer類,但它失敗了。
因此,我意識到這是單元測試的完美實例,所以每次運行單元測試時,它都會驗證Windsor是否設置正確。
因此我創建了以下單元測試:
[TestMethod]
public void Windsor_Can_Resolve_HomeController_Dependencies()
{
// Setup
WindsorContainer container = new WindsorContainer();
// Act
HomeController controller = (HomeController)container.Kernel.Resolve(typeof(HomeController));
}
這與我的WindsorControllerFactory.GetControllerInstance()
方法中存在的代碼完全相同,所以我不確定為什么這不起作用。 當這運行我得到:
Test method MyApp.Tests.Controllers.HomeControllerTest.Windsor_Can_Resolve_HomeController_Dependencies threw exception:
Castle.MicroKernel.ComponentNotFoundException: No component for supporting the service MyApp.Controllers.HomeController was found
我不知道如何解決這個問題。 我唯一能想到的是,因為它在我的測試項目中,而不是我的Asp.net MVC項目,它可能不會自動獲取我的CommandAndQueryInstaller
類,其中包含我的所有windsor類型注冊。
有關單元測試windsor依賴配置的建議嗎?
您正在設置中創建一個新的WindsorContainer,而不是在容器中注冊任何依賴項。 您需要運行IWindsorInstallers才能填充容器。
[TestMethod]
public void Windsor_Can_Resolve_HomeController_Dependencies()
{
// Setup
WindsorContainer container = new WindsorContainer();
container.Install(FromAssembly.Containing<HomeController>());
// Act
HomeController controller = container.Resolve<HomeController>();
}
請注意,您不必訪問內核。 你可以使用container.Resolve <T>(),它也在內部處理強制轉換。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.