Asp.net mvc 如何在单元测试中实例化使用ninject的存储库

Asp.net mvc 如何在单元测试中实例化使用ninject的存储库,asp.net-mvc,unit-testing,repository,ninject,Asp.net Mvc,Unit Testing,Repository,Ninject,我有这样一个存储库: public class Repository<TEntity> : IRepository<TEntity> where TEntity : class, IEntity { private readonly IContext _db; public Repository(IContext context) { _db =context; } ... 公共类存储库:i存储库,其中tenty:class

我有这样一个存储库:

public class Repository<TEntity> : IRepository<TEntity> where TEntity : class, IEntity
{
   private readonly IContext _db;

   public Repository(IContext context)
   {
      _db =context;
   }

   ...
公共类存储库:i存储库,其中tenty:class,ienty
{
专用只读IContext_db;
公共存储库(IContext上下文)
{
_db=上下文;
}
...
在Global.asax中,我将ninject设置为:

kernel.Bind<IContext>().To<Context>();
kernel.Bind().To();
这在应用程序中运行良好,可能是因为我使用参数调用构造函数来显式实例化。但是,单元测试中存在问题

在单元测试中,我有:

var mockUnitOfWork = new Mock<UnitOfWork>();

var mockProjectApprovalRepository = new Mock<Repository<ProjectApproval>>();

mockUnitOfWork.Setup(x => x.ProjectApprovalRepository).Returns(mockProjectApprovalRepository.Object);
var mockUnitOfWork=new Mock();
var mockProjectApprovalRepository=new Mock();
Setup(x=>x.ProjectApprovalRepository).Returns(mockProjectApprovalRepository.Object);
在最后一行,我得到了错误:

无法实例化类MyNamespace的代理。存储库找不到无参数构造函数

我对此感到困惑,因为我认为Ninject的要点是我不需要指定无参数构造函数。Ninject不应该实例化一个上下文并使用带有一个参数的构造函数。

当您执行
新建Mock()时
,您要求Moq构造对象。如果您要求Ninject构造对象,它会这样做

Ninject不会神奇地介入任何发生构造的地方-
new
仍然是
new

在这种情况下,可以使用
Mock
构造函数的重载,在其中指定额外的参数

请注意,人们普遍认为Ninject不应该离单元测试这个术语的通用定义很近