在我们单元测试的实践中,常常会发现一个方法依赖一个无法控制的对象,我们称其为外部依赖项。
一个外部依赖项——是系统中的一个对象,被测试代码与这个对象发生交互,但你不能控制这个对象。(常见的外部依赖项包括文件系统、线程、内存以及时间等。)
而单元测试背后的思想是,仅测试这个方法中的内容,当测试开始渗透到其他类、服务或系统时,此时测试便跨越了边界。而一旦测试跨了边界就变成了集成测试。进而也带来了所有与集成测试相关的问题——运行速度较慢,需要配置,一次测试多个内容......
1 桩对象(存根)
什么是桩对象(存根)
一个存根(桩对象)(stub)是对系统中存在的一个依赖项(或者协作者)的可控制的替代物。通过使用存根,你在测试代码时无需直接处理这个依赖项。
如何使用桩对象(存根)破除依赖
示例1
假设我们有下面这样一个方法,从文件系统中读取一个文件,获取文件的扩展名,如果扩展名是jpg就返回true,否则返回false。
IFileExtensionManager fileManager;
public bool IsValidFileName(){
//获取文件扩展名
string extName=fileManager.GetExtName();
if(extName=="jpg"){
return true;
}
return fals