我现在正在编写一个解析epub文件的程序(基本上是带有一些xml元数据文件的zip)。该程序适用于我测试过的所有输入文件。
尽管如此,我还是想编写一些测试(单元测试或行为测试)以确保它与所有文件一起使用并拥有“更好的代码”。
完美地(至少在理论层面上)实现EPUB规范并为测试提供一些XML片段的唯一方法是什么?
我对测试很熟悉但是我从来没有对以文件为输入的东西进行测试,所以我也在寻找更多相关信息。 :)
答案 0 :(得分:2)
单元测试方法是消除测试中的外部依赖性。这样,运行测试不需要您的环境执行除托管测试程序之外的任何操作。
在你的代码中,大多数情况下你不应该对“testfile.epub”感兴趣。这只是OpenEpubFile()例程的工作。相反,您有兴趣测试“这里是指向某些数据的指针,如何解压缩它?”的特定逻辑。或“我如何处理标题标签?”因此,您的单元测试将提供样本压缩数据以测试解压缩逻辑的工作方式,并提供样本标题标记以查看逻辑如何处理标题。你会传递它们很好,很长,很短,格式错误的标题,你会提供运行你需要在代码中测试的逻辑所需的各种数据。但是这些数据不必每次都来自一个文件,它可以来自测试工具。
如果您发现您的逻辑难以测试,那么可能是时候将其模块化了。您需要从读取数据的代码中分离出打开文件的代码。您需要将读取数据的代码与解压缩数据的代码分开。您需要将解压缩数据的代码与解析XML的代码分开。您需要将构建屏幕的代码与绘制屏幕的代码分开。 Extract Method重构过程在这里非常有用,以及重命名方法。而且你将严重依赖依赖倒置模式。
每次您可以将其分解为实现纯逻辑的无状态代码,您可以非常轻松地测试这些规则。更好的是,当您将其分解为所需的模块时,您会发现添加新模块来处理新案例变得更加容易,因为您可以重复现有模式。
是的,在某些时候,您将有一个测试可以确保您的open()语句可以实际打开文件。在单元测试代码通过所有测试后,就可以进行集成测试了。在那里,您可以为它提供一组真实的.epub文件,并根据需要查看输出。
答案 1 :(得分:0)
无需重新实现.epub仅用于测试。
创建一些微小的.epub文件以显示某些特征,并针对这些特征创建测试。