如何测试指数?

时间:2013-03-15 03:10:39

标签: asp.net-mvc testing ninject

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

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。请帮助我!有任何问题请留言。

1 个答案:

答案 0 :(得分:1)

您的Home的构造函数包含IDB接口,因此您需要将其传递给那里。

由于您有界面,您可以使用模拟对象(https://stackoverflow.com/questions/37359/what-c-sharp-mocking-framework-to-use)来模仿您的IDB。