【问题标题】:Mock filesystem in integration testing集成测试中的模拟文件系统
【发布时间】:2008-11-13 09:10:03
【问题描述】:

我正在编写一个执行一些外部命令行实用程序的 ruby​​ 程序。如何从我的 rspec 测试中模拟文件系统,以便我可以轻松设置一些文件层次结构并在测试后对其进行验证。最好在 ram 中实现,以便测试快速运行。

我意识到我可能找不到可移植的解决方案,因为我的外部实用程序是直接与操作系统文件服务交互的本机程序。 Linux 是我的主要平台和解决方案就足够了。

【问题讨论】:

    标签: ruby linux unit-testing rspec mocking


    【解决方案1】:

    您查看过FakeFSMockFS 吗?

    注意:到 MockFS 的原始链接不起作用。 looks like 它不再被维护。

    【讨论】:

    • 非常好,Rspec 助手已发货!
    • 非常容易设置。强烈推荐给任何滚动浏览的人。例如,对于简单的读写来说就足够了(测试我的文件日志模块肯定绰绰有余):github.com/fakefs/fakefs#temporarily-faking-the-fs
    【解决方案2】:

    也许这不会直接回答您的问题,但在这种情况下,我倾向于在测试设置期间创建一个临时目录并在拆卸时将其删除。当然,您还必须确保应用程序写入此临时目录。我总是有一个配置选项来定义我可以在测试期间覆盖的目标目录。

    当涉及到断言时,我使用普通的File.exist?File.directory?,但当然你可以围绕它创建自己的包装器。如果您需要一些初始状态,您可以构建一个可用作夹具的目录,并将在测试设置期间复制到临时目录。

    【讨论】:

    • 这可能适用于 ramdisk 文件系统,但我正在寻找一些更高级的解决方案。
    • 你在哪里创建临时目录?创建和删除 /tmp/my_test_dir 是否安全?
    【解决方案3】:

    您可以创建一个大文件(虚拟磁盘大小)并将该文件挂载为loop-back device。您可以在此设备上创建任何文件系统和目录结构。
    您可以创建其中 2 个并进行简单的差异比较,以确保测试后的数据完整性。
    我希望我能正确理解您的要求,因为我不确定为什么简单的 ramdisk 解决方案不够好。
    This 也可能是相关的。

    【讨论】:

    • 该死的,这是一个真正令人讨厌的答案,但可能不适用于大多数 Ruby 爱好者。但是,它应该可以工作。我会投票赞成极客因素。 :-)
    • 我会把它当作一种恭维 :)
    • 你可以用 unionfs 让这个线程更进一步:en.wikipedia.org/wiki/UnionFS
    猜你喜欢
    • 2020-02-13
    • 1970-01-01
    • 2011-10-04
    • 2012-04-25
    • 2013-11-09
    • 2018-08-07
    • 2016-07-25
    • 2017-12-11
    • 1970-01-01
    相关资源
    最近更新 更多