2010-08-03 66 views

回答

3

那么,在这个特殊情况下(Dist::Zilla插件),你会想要使用Dist::Zilla::Tester。它负责创建一个临时目录,用文件填充它,然后进行清理。例如,请参阅the tests from my DZP::CJMtests from Dist::Zilla itself,尤其是plugins directory

更新: Dist :: Zilla 4.200002推出了Test::DZil模块,它增加了一些对测试插件有用的实用函数。您可能想要直接使用它而不是直接使用Dist :: Zilla :: Tester。

3

这有点取决于模块,但我的一般策略是:

  • 确保文件内容的逻辑是100%独立的 - 只要在不同的方法是 - 从文件力学(如选择目录/打开文件/关闭文件/错误处理)。

  • 确保文件结构是100%灵活的,例如,您可以从外部驱动程序中选择目录/文件名。

  • 的文件力学写入测试中,通过简单地打开指定文件中指定的目录,将其关闭,确保没有错误发生,该预期的文件存在,并且有大小为零

  • 创建测试数据数组,用由3份

    1. 输入数据为文件内容的逻辑数组的每个元素,可能加上测试配置指示如有必要对这些数据调用从文件内容的逻辑方法。

    2. 预计文件名设置

    3. 预期的文件内容,焦油揉成团预期文件(要生成精确预期的内容和正确的预期的名称准确的文件)的形式。

      预计的成果压缩包应该是在一个单独的子目录(说得清你的测试脚本住目录下的“expected_results”。

      您需要在情况下,你的文件生成逻辑生成> 1文件压缩包。

  • 然后,运行一个循环在测试阵列中的每个测试之前创建:

    1. 创建一个新的“实际结果”临时目录(或清理之前测试的目录)

    2. 将您模块中的目录设置为临时目录;将测试信息中的模块文件名设置为预期的文件名。

    3. 使用测试的逻辑方向(如果适用)和测试的输入数据运行从模块文件开罐器方法(先前测试)

    4. 执行内容生成逻辑。

    5. 运行文件接近方法(以前测试过)

    6. 创建一个“临时的预期结果” temp目录(或清理从最后一次测试的一个)

    7. 复制“期望的结果”压缩包从“expected_results”测试子目录到上一个项目符号点创建的“临时预期结果”临时目录

    8. 解压缩“临时预期结果”临时目录中的tarball并从那里删除tarball。

    9. directory -diff“临时预期结果”临时目录与“实际结果”临时目录(例如,确保两个文件都有100%相同的文件列表,并且每个文件的内容都是100%相同的,通过system()通话使用diff

由于上述逻辑是非常通用的,我一般抽象大部分走成一个“测试:: FileGenerator”模块可以重新使用的所有单位和整合测试文件生成能力测试

+0

好吧,忘了提及这一点,但是如果关于使文件内容生成逻辑的部分只与文件句柄对象或类属性一起工作,这种方法将大大受益。这种自我明显但可能是明确阐明的有价值的技术。 – DVK 2010-08-03 11:00:12