首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用文件系统依赖项对代码进行单元测试

使用文件系统依赖项对代码进行单元测试
EN

Stack Overflow用户
提问于 2008-09-24 18:46:57
回答 11查看 52.1K关注 0票数 150

我正在编写一个组件,给定一个ZIP文件,它需要:

  1. 解压缩该文件。
  2. 在解压缩的文件中查找特定的dll。
  3. 通过反射加载该dll并对其调用方法。

我想对这个组件进行单元测试。

我很想编写直接处理文件系统的代码:

代码语言:javascript
复制
void DoIt()
{
   Zip.Unzip(theZipFile, "C:\\foo\\Unzipped");
   System.IO.File myDll = File.Open("C:\\foo\\Unzipped\\SuperSecret.bar");
   myDll.InvokeSomeSpecialMethod();
}

但是人们经常说,“不要编写依赖于文件系统、数据库、网络等的单元测试。”

如果我以一种单元测试友好的方式来编写,我想应该是这样的:

代码语言:javascript
复制
void DoIt(IZipper zipper, IFileSystem fileSystem, IDllRunner runner)
{
   string path = zipper.Unzip(theZipFile);
   IFakeFile file = fileSystem.Open(path);
   runner.Run(file);
}

耶!现在它是可测试的;我可以将测试替身(模拟)提供给DoIt方法。但代价是什么呢?我现在必须定义3个新的接口,才能使其可测试。那么,我到底在测试什么?我正在测试我的DoIt函数是否与它的依赖项正确交互。它不会测试zip文件是否被正确解压缩,等等。

感觉我不再是在测试功能了。感觉我只是在测试类交互。

我的问题是这个:什么是对依赖于文件系统的东西进行单元测试的正确方法?

编辑我使用的是.NET,但是这个概念也可以应用Java或原生代码。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/129036

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档