如何对控制器进行单元测试,控制器又用两个参数调用存储库

时间:2014-12-31 00:49:34

标签: asp.net-mvc-4 unit-testing

目前,我正在为我的控制器编写单元测试。下面是我在项目中的代码结构。

MyController类

public class MyController : Controller
{              
    private readonly MyRepository _myRepository;        

    public MyController()
        : this(new MyRepository())
    {

    }

    [HttpGet]        
    public ActionResult Index()
    {
        var items = _myRepository.GetAllItems();
        if (items.Count() == 0)
            return View("EmptyItems");
        else
        {
            return View("List", items);
        }
    }
}

MyRepository类

public class MyRepository : IDisposable, IMyRepository
{
    private readonly MyDbContext _dbcontext;
    private readonly ISecurityService _securityService;


    public TodoListItemsRepository() : this(new MyDbContext(), new SecurityService())
    {            

    }
    public TodoListItemsRepository(MyDbContext context, ISecurityService securityService)
    {
        _dbcontext = context;
        _securityService = securityService;
    }
    public IEnumerable<MyModel> GetAllItems()
    {
        var userid = _securityService.GetUser();
        var todoList = _dbcontext.MyList.Where(e => e.UserId == userid);

        return todoList;
    }
    //Other Methods etc...
    ......
}

SecurityService类

public class SecurityService : ISecurityService
{    
    public int GetUser()
    {
        return (int)Membership.GetUser().ProviderUserKey;
    } 
}

这里我的存储库中的所有方法都依赖于GetUser方法。因此,我在构造函数中初始化了它。存储库类是从控制器构造函数初始化的。

我的问题是 - 除非我需要初始化dbcontext和安全服务,否则我无法对Index操作进行单元化。有人可以告诉我,如果我正在做正确的事情或我的代码结构中需要的任何更改,以便我可以单元测试我的应用程序?我是MVC的新手。所以,任何建议都会非常感激。

0 个答案:

没有答案