如何在.net应用程序的服务层中注入模拟的dbcontext?

时间:2014-11-27 09:43:18

标签: c# .net unit-testing moq

我目前正在编写单元测试,我遇到了以下问题:

我应该为服务层编写测试。服务层由不同类型的服务组成,所有服务都实现ServiceBase类。服务基础的主要思想体现在以下逻辑

protected void GetContext(Action<DataContext> action)
{
    GetContext(action, DataContextOptions.Default);
}

protected void GetContextAutoSave(Action<DataContext> action)
{
    GetContext(action, DataContextOptions.AutoSave);
}

private static void GetContext(Action<DataContext> action, DataContextOptions options)
{
    using (var context = new DataContext(options))
    {
        action(context);
    }
}

因此,只要需要与db进行交互,就会在服务中应用以下逻辑:

GetContext(dataContext =>
{
    perform some logic on the dataContext;
});

DataContext类本身实现了一个基类,它具有用于设置DbContext的构造函数。这就是应用程序与db交互的方式。至于单元测试部分,我决定选择MOQ,我很满意它的功能。我能够伪造DbContext,但现在我想知道如何将它注入程序的层次结构中,以便我可以用它来测试服务的逻辑。一个更具体的问题是上述{ServiceBaseDataContextDataContextBase}中的哪个类必须嘲笑,以便当我调用GetContext方法时,我最终会假的DbContext?至于与db交互的逻辑体系结构,我愿意接受任何建议。请分享你的想法。

0 个答案:

没有答案