您在这里拥有的不是单元测试。单元测试测试单个代码单元(尽管它可能很大),并且不依赖于外部环境因素,如文件或网络连接。
由于您依赖于此处的文件,因此您拥有的是集成测试。您正在测试您的代码是否安全地与代码控制之外的东西(在本例中为文件系统)集成。
如果这确实是一个集成测试,您应该更改测试,以便测试您真正想要测试的东西。
如果您仍将其视为单元测试,例如您正在尝试测试 CSV 解析,那么我将重构代码,以便您可以模拟/存根/伪造 CSV 文件内容的实际读取。这样,您可以更轻松地向 CSV 解析器提供测试数据,而无需依赖任何外部文件。
例如,您是否考虑过:
- 防病毒程序包可能无法让您立即访问该文件
- 一个典型的程序员工具,如 TortoiseSvn,将 shell 覆盖集成到资源管理器中,有时会保留文件太长时间,并且并不总是让程序访问文件(您删除了文件,并尝试用新文件覆盖它) ? 当然,让我先完成删除,但是有一个程序保留了该文件,因此可能需要一段时间...)
- 该文件可能实际上并不存在(为什么?)
- 您可能没有对该路径的读取权限
- 您可能有错误的文件内容(早期调试会话的剩余内容?)
一旦你开始涉及文件系统、网络连接等外部系统,就会有很多事情可能出错,以至于你所拥有的基本上是一个脆弱的测试。
我的建议:弄清楚您要测试的内容(文件系统?CSV 解析器?),并删除与该目标冲突的依赖项。