创建仅用于单元测试的文件
这可能是一个有趣的问题。我需要测试是否可以成功上传并获取PDF文件。这适用于基于文本的文件,但我只想检查PDF。为了运行此单元测试,我需要一个PDF文件。有几种选择。我可以创建一个虚拟PDF文件并将其存储在某个文件夹中,然后读取该文件并将其保存到系统中。但是现在,我的单元测试依赖于PDF文件。因此,任何运行单元测试的人都必须拥有PDF文件,这有点不好。
对我而言,另一种方法是创建PDF文件。这没什么大不了的,因为我可以简单地创建一个扩展名为.pdf的虚拟文件,或者甚至可以使用某些PDF第三方工具来创建PDF文件。
另一种方法是将PDF文档嵌入为嵌入式资源,然后从程序集中提取该文档。
我们认为处理此问题的最佳方法是什么?
解决方案
我通常会在需要外部内容的附带测试中添加一个真实文件。这样,我们就可以使用真实文件进行测试,并且可以轻松地将其替换为不同类型的内容测试。
将包含测试的PDF文件保存在资源目录中。测试应尽可能简单,并且创建文件仅仅是可能失败的另一点。
我认为最好处理尽可能多的"真实"对象。引入"模拟"(在这种情况下,它不是确切的术语)对象仅在处理测试数据集不可行时才有帮助。我认为在版本控制系统中放置测试文件并不重要,因此最好不要使用它,而不要编写大量可能导致其他错误和测试的代码。
也请使用非常接近预期平均文件的PDF。
我担心的是,如果我将文件放置在其他目录中,那么假设资源处于单元测试中,那么我不需要访问文件的完整路径。我正在手动运行测试。另外,当我移动到另一台计算机上并将解决方案放置在具有不同名称的文件夹中时,该文件的路径也会混乱。
除非有某种方法可以从我的应用程序(应该存在)中访问项目的文件夹。
将pdf文件(或者带有pdf扩展名的虚拟文件)添加到资源中的方法。我们应该能够通过测试单元中的相对路径(例如.... \ bla \ foo.pdf)进行访问。
并且不要仅仅为了测试我们是否具有读取或者写入访问权限而尝试创建有效的pdf文件。 KISS原则适用...