Linq 如何使Ninject返回模拟对象

Linq 如何使Ninject返回模拟对象,linq,unit-testing,ninject,moq,Linq,Unit Testing,Ninject,Moq,我有一个这样的代码 public class EmployeeController : Controller { public ContextWrapper contextWrapper; public EmployeeController (IContextWrapper wrapper) { contextWrapper = wrapper; } var empRepository = new EmployeeRepository(con

我有一个这样的代码

public class EmployeeController : Controller
{
    public ContextWrapper contextWrapper;
    public EmployeeController (IContextWrapper wrapper) 
    { 
        contextWrapper = wrapper;
    }
var empRepository = new EmployeeRepository(contextWrapper);
//do some tests with this repository.
some values = contextWrapper.datacontext.get some values from the database table
//do some tests with these values.
在依赖项解析程序中,我有IContextWrapper的绑定

kernel.Bind<IContextWrapper>().To<ContextWrapper>();
现在,我在这个控制器中的操作方法如下所示

public class EmployeeController : Controller
{
    public ContextWrapper contextWrapper;
    public EmployeeController (IContextWrapper wrapper) 
    { 
        contextWrapper = wrapper;
    }
var empRepository = new EmployeeRepository(contextWrapper);
//do some tests with this repository.
some values = contextWrapper.datacontext.get some values from the database table
//do some tests with these values.
能够测试这个方法

我应该能够提供一些模拟数据库,而不是字面上的或 使contextWrapper.datacontext返回模拟值或 我甚至想过创建另一个不使用LINQDataContext对象的IContextWrapper实现。并为此控制器创建另一个构造函数并传递该伪实现。此外,在依赖项解析器中,我会将伪对象绑定到IContextWrapper。虽然我不知道如何制作Ninject 作为最后的手段,请针对一个测试数据库测试我的方法,因为它最终都归结为这个LINQDataContext对象,而且似乎我无法在超过某个级别后将其删除。
问题是我读得越多,就越感到困惑。我已经尽可能详细地解释了我的问题。如果有人对如何实现这一点有明确的想法,请提出建议。

为什么不也通过构造函数注入存储库,而不是在控制器中创建它们?那就更多了easier@LowFlyingPelican:好的。我也想到了这一点。这将解决就业安置的问题。但是datacontext进入图片的那一行呢?您可以使用另一个.Bind。。。或者,在测试中重新绑定。你可以做一些像.ToConstant。。模拟实例,以便您可以从外部设置模拟/伪造。然而,以这种方式测试db访问是相当麻烦的。通常建议您执行集成测试,而不是p.Ex。使用内存中的数据库(使用一些数据设置),然后测试值是否包含预期数据…添加存储库层的想法不是在更高的层中引用它,因此为了能够轻松地进行测试,您应该将对存储库中数据上下文的所有直接访问封装起来,然后可以模拟存储库并将其传递给构造函数