Ruby模拟文件和检查内容

时间:2013-06-09 13:17:05

标签: ruby rspec gem

我正在编写一个gem,它从命令行向gemfile添加依赖项。鉴于gem名称,它从rubygems获取最新版本并将其添加到用户的gemfile中。

我使用rspec练习测试驱动开发。我想知道如何模拟文件的存在并检查它的内容?

有没有做这种事情的模式?提示,链接或示例将有所帮助。我没有采用特定的测试方法。如果嘲笑不是要走的路,请告诉我。谢谢!

2 个答案:

答案 0 :(得分:1)

如果要模拟只需要编写和读取的文件对象(无文件系统操作),请尝试Ruby的内置StringIO。只需require 'stringio',使用StringIO.new("Some contents")创建包含任何内容的“文件”,并使用StringIO对象上的string方法检查其内容。

答案 1 :(得分:0)

单元测试与集成测试

你没有发布任何代码,所以我将不得不做出一些假设。一般来说,从Ruby的核心或标准库中行使行为是浪费时间。此外,您的测试应该使用定义类行为的方法,而不一定是类中的每个方法。

当您越过边界测试I / O时,您经常进行集成测试。有时集成测试是必要的,但与单元测试相比,它们应该是一个非常小的子集。

尽管如此,虽然涉及文件系统,数据库或网络I / O的集成测试通常比单元测试慢,但是它们是否足够慢以保证存根,模拟或特定于测试的解决方法将特定于您的代码库。

测试选项

如果你真的需要这样做,你有很多选择。其中一些选项包括:

  1. 将RAM磁盘用于文件系统I / O.
  2. 对IO,File或FileUtils的调用进行存根。
  3. 使用文件夹来避免此问题。
  4. 使用StringIO夹具避免此问题。
  5. 在测试中重写您的类以接受除File对象之外的String和/或StringIO。
  6. 使用像FakeFS这样的宝石来处理你的存根/嘲笑。
  7. 这并不是一个规范详尽的清单。毫无疑问有其他选择,但上述一个或多个应该处理任何常见用例。