我目前正在编写单元测试,我遇到了以下问题:
我应该为服务层编写测试。服务层由不同类型的服务组成,所有服务都实现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
,但现在我想知道如何将它注入程序的层次结构中,以便我可以用它来测试服务的逻辑。一个更具体的问题是上述{ServiceBase
,DataContext
,DataContextBase
}中的哪个类必须嘲笑,以便当我调用GetContext
方法时,我最终会假的DbContext
?至于与db交互的逻辑体系结构,我愿意接受任何建议。请分享你的想法。