我正在编写一个 gem,它从命令行向 gemfile 添加依赖项。给定 gem 名称,它会从 rubygems 获取最新版本并将其添加到用户的 gemfile 中。
我使用rspec
. 我想知道如何模拟文件的存在并检查它的内容?
有没有做这种事情的模式?提示、链接或示例将有所帮助。我没有设置特定的测试方式。如果嘲笑不是要走的路,请告诉我。谢谢!
如果你想模拟一个只需要读写的文件对象(没有文件系统操作),试试 Ruby 的 builtin StringIO
。只是require 'stringio'
,使用创建一个包含任何内容的“文件” ,并使用StringIO 对象上StringIO.new("Some contents")
的方法检查其内容。string
您没有发布任何代码,所以我将不得不做出一些假设。一般来说,从 Ruby 的核心或标准库中执行行为是浪费时间。此外,您的测试应该使用定义类行为的方法,而不一定是类中的每个方法。
当您跨界测试 I/O 时,您通常会进行集成测试。有时集成测试是必要的,但与单元测试相比,它们应该是一个非常小的子集。
综上所述,虽然涉及文件系统、数据库或网络 I/O 的集成测试通常比单元测试慢,但它们是否慢到足以保证存根、模拟或特定于测试的变通办法将特定于你的代码库。
如果你真的需要这样做,你有很多选择。其中一些选项包括:
这并不意味着是一个规范详尽的列表。毫无疑问,还有其他选择,但上述一个或多个应该可以处理任何常见的用例。