繁体   English   中英

使用IOC进行ASP.MVC和mvccontrib流畅测试

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM