[英]ASP.MVC and mvccontrib fluent test with IOC
我正在尝试使用流利的测试助手来测试AbstractRestfulFluentController
public class CustomerController : AbstractRestfulFluentController
{
private readonly IService<Customer> _customerService;
private readonly IService<CustomerAddress> _addressService;
public CustomerController(IService<Customer> customerService, IService<CustomerAddress> addressService)
{
//Assume we use these in other actions
_customerService = customerService;
_addressService = addressService;
}
public ActionResult Index()
{
return View();
}
}
如您所见,我正在向控制器注入一些服务,并使用IOC解决这些服务。 我的问题是,在无参数控制器的情况下,我使用mvccontrib中的流畅测试方法发现的所有示例都无法正常工作。
public void SuccessfulIndex()
{
GivenController.As<CustomerController>()
.ShouldRenderItself(RestfulAction.Index)
.WhenCalling(x => x.Index());
}
我不确定如何才能将IOC与mvccontrib中的流利测试技术一起使用。 我发现有可能的评论但没有发现任何东西。 为了实际使用IOC和流利测试,我该怎么办?
您是否尝试过属性注入而不是构造函数注入?
http://ninject.codeplex.com/wikipage?title=Injection%20Patterns
我目前有一个刚刚发布的奇怪的ninject问题,但这至少应该为您指明正确的方向...所有代码都可以用来设置依赖项注入。
https://stackoverflow.com/questions/3909452/unit-testing-asp-net-mvc-controllers-with-ninject
您可以编写一个方法来提供控制器实例:
public static class GivenController
{
public static ActionExpectations<T> As<T>(T controller) where T: Controller, new()
{
return new ActionExpectations<T> { MockController = controller };
}
}
然后在您的单元测试中:
var controller = CreateMockedCustomerController();
GivenController
.As<CustomerController>(controller)
.ShouldRenderItself(RestfulAction.Index)
.WhenCalling(x => x.Index());
要求是控制器应该是模拟对象,我认为这不是一种很干净的方法(测试模拟对象)。 您可以这样创建它:
var controller = MockRepository
.GeneratePartialMock<CustomerController>(new object[] { dep1, dep2 });
注意如何将依赖项传递给构造函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.