asp.net-mvc - 如何测试指数?

标签 asp.net-mvc testing ninject

在 MVC4 中,我使用 Ninject 注入(inject) Controller ,我想测试“索引”。 注入(inject)的写法(The controller for injection):

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);
    } 
}

美洲开发银行:

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...
}

Controller :

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

最佳答案

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

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

关于asp.net-mvc - 如何测试指数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15424023/

相关文章:

c# - Ninject:将某物绑定(bind)到自身是什么意思?

c# - asp.net mvc 在数据库中插入数据并刷新部分

asp.net - 创建密码和密码盐

jquery - ASP.NET MVC jQuery 发布错误

testing - 使用 plone.app.testing 导入错误

c# - 如何防止 AutoFixture 的 GuardClauseAssertion 检查继承类中的构造函数?

c++ - 在没有 root 权限的情况下分析 C++ 中的多线程代码

jquery - 使用 Ajax 和 Json 填充 JQuery Flot 图表

.net - 按实现类型查找 Ninject 绑定(bind)

dependency-injection - Ninject 与 Windows 应用程序