2013-03-15 79 views
1

在MVC4中,我使用Ninject注入控制器,我想测试“索引”。 注射的写入(用于注射的控制器)的:如何测试索引?

public class NinjectDependencyResolver : IDependencyResolver 
{ 
    private IKernel kernel; 

    public NinjectDependencyResolver() 
    { 
     kernel = new StandardKernel(); 
     AddBindings(); 
    } 

    private void AddBindings() 
    { 
     kernel.Bind<IDB>().To<DB>(); 
    } 

    public object GetService(Type serviceType) 
    { 
     return kernel.TryGet(serviceType); 
    } 

    public IEnumerable<object> GetServices(Type serviceType) 
    { 
     return kernel.GetAll(serviceType); 
    } 
} 

的IDB:

public interface IDB 
{ 
    IBugTrackRepository iBugTrackRepository { get; } 
    ICategoryRepository iCategoryRepository { get; } 
    ... 
    ... 
    IUserRepository iUserRepository { get; } 
} 

为了实现:

public class DB : IDB 
{  
    public IBugTrackRepository iBugTrackRepository 
    { 
     get { return new BugTrackRepository(); } 
    } 
    public ICategoryRepository iCategoryRepository 
    { 
     get { return new CategoryRepository(); } 
    } 
    ... 
    ... 
    public IUserRepository iUserRepository 
    { 
     get { return new UserRepository(); } 
    } 
} 

为了实现:

public class BugTrackRepository : IBugTrackRepository 
{ 
    private DBEntities context = new DBEntities(); 

    public IQueryable<BugTrack> bugtrack 
    { 
     get { return context.BugTrack; } 
    } 
    ... 
    //Other database operations... 
} 

的控制器:

public class HomeController : Controller 
{  
    private IDB repository; 
    public HomeController(IDB repo) 
    { 
     repository = repo; 
    } 

    public ActionResult Index() 
    { 
     ViewBag.mytitle = "Home Page"; 
     return View(); 
    } 
} 

测试代码:

[TestMethod] 
    public void TestIndex() 
    { 
     HomeController controller = new HomeController(??); 

     ViewResult result = controller.Index() as ViewResult; 

     Assert.AreEqual("Home Page", result.ViewBag.mytitle); 
    } 

,但这个测试是错误的,我却不知道如何实例化这个Controller.Please帮助我有任何问题请留言!

+0

使用Ninject.MVC3,不要搞砸你自己的Dependency Resolver实现,生活太短。不要在变量名称上使用'i'前缀,它们会使眼睛流血! – 2013-03-18 07:31:37

回答