我有多个级别的类和接口,Level1
即Level2
和Level3
。
类Level1
依赖于类Level2
,类Level2
依赖于类Level3
。
这是该设计的代码:
public interface ILevel1
{
string GetData();
}
public class Level1 : ILevel1
{
ILevel2 level2;
public Level1(ILevel2 level2)
{
this.level2 = level2;
}
public string GetData()
{
// some more process on data.
var data = level2.GetDataAndProc();
data = data + ",Proc at Level1";
return data;
}
}
public interface ILevel2
{
string GetDataAndProc();
}
public class Level2 : ILevel2
{
ILevel3 level3;
public Level2(ILevel3 level3)
{
this.level3=level3;
}
public string GetDataAndProc()
{
var data=level3.GetDataFromDB();
// processing on the data from db.
data=data+ " Processed at level2";
return data;
}
}
public interface ILevel3
{
string GetDataFromDB();
}
public class Level3 : ILevel3
{
public string GetDataFromDB()
{
// Functionalities to get data from db.
return "DB Data";
}
}
现在,我可以在隔离模拟接口中对类Level1
进行单元测试,在隔离模拟接口中对类进行Level2
单元测试。我用作测试框架和模拟框架。Level2
Level3
Nunit
NMock
到目前为止,一切都很好。
但是,我可以单元测试前两个级别的代码只模拟Level3
接口而不模拟Level2
吗?我的意思是我想对类进行单元测试Level1
而不是嘲笑Level2
而是嘲笑Level3
。我想这样做是因为Level3
类从 DB 中获取数据,而我只想模拟这个 DB 层,这样我的整个项目就只能使用模拟 db 而不是真正的 db。