在 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/