如何让Ninject返回一个模拟对象

时间:2014-10-22 04:41:44

标签: linq unit-testing ninject moq

我有一个看起来像这样的代码

public class EmployeeController : Controller
{
    public ContextWrapper contextWrapper;
    public EmployeeController (IContextWrapper wrapper) 
    { 
        contextWrapper = wrapper;
    }

在我的依赖项解析器中,我有IContextWrapper

的绑定
kernel.Bind<IContextWrapper>().To<ContextWrapper>();

ContextWrapper的实现有一个Linq DataContext类型的对象。

public class ContextWrapper : IContextWrapper
{
    public MyDataContext dataContext;

    public ContextWrapper(MyDataContext  context)
    {
        this.dataContext = context;
    }

现在我在此控制器中的操作方法如下所示

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.

能够测试此方法

  1. 我应该能够提供某种模拟数据库(不是字面意思)或
  2. 使contextWrapper.datacontext返回模拟值或
  3. 我甚至想过创建一个没有使用Linq DataContext对象的IContextWrapper的另一个实现。并为此控制器创建另一个构造函数并传递该伪实现。同样在我的依赖解析器中,我将假对象绑定到IContextWrapper。虽然我不知道如何制作Ninject
  4. 作为最后的手段测试我的方法对测试数据库,因为它归结为这个Linq DataContext对象,似乎我无法摆脱它超过一定的水平。
  5. 问题是我读的越多,我就越困惑。我试图尽可能详细地解释我的问题。如果任何人对如何获得这个有明确的想法,请建议。

0 个答案:

没有答案