目前,我正在为我的控制器编写单元测试。下面是我在项目中的代码结构。
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的新手。所以,任何建议都会非常感激。