Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby模拟文件并检查内容_Ruby_Rspec_Gem - Fatal编程技术网

Ruby模拟文件并检查内容

Ruby模拟文件并检查内容,ruby,rspec,gem,Ruby,Rspec,Gem,我正在编写一个gem,它从命令行向gem文件添加依赖项。给定gem名称,它从rubygems获取最新版本并将其添加到用户的gem文件中 我使用rspec实践测试驱动开发。我想知道如何模拟文件的存在并检查其内容 做这种事有什么模式吗?提示、链接或示例将有所帮助。我不打算用一种特定的方法来测试它。如果嘲弄不是办法,请告诉我。谢谢 如果您想模拟一个只需要写入和读取的文件对象(无文件系统操作),请尝试Ruby的内置StringIO。只需要求“stringio”,使用stringio.new(“某些内容”

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

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


做这种事有什么模式吗?提示、链接或示例将有所帮助。我不打算用一种特定的方法来测试它。如果嘲弄不是办法,请告诉我。谢谢

如果您想模拟一个只需要写入和读取的文件对象(无文件系统操作),请尝试Ruby的内置
StringIO
。只需
要求“stringio”
,使用
stringio.new(“某些内容”)
创建一个包含任何内容的“文件”,并使用stringio对象上的
string
方法检查其内容。

如果要模拟只需要写入和读取的文件对象(无文件系统操作),试试Ruby的内置
StringIO
。只需
要求“stringio”
,使用
stringio.new(“某些内容”)
创建一个包含任何内容的“文件”,并使用stringio对象上的
string
方法检查其内容。

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

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

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

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

  • 为文件系统I/O使用RAM磁盘
  • 对IO、File或FileUtils的存根调用
  • 通过使用文件固定装置来避免问题
  • 通过使用StringIO夹具避免问题
  • 重新编写测试中的类以接受字符串和/或StringIO以及文件对象
  • 使用gem之类的工具为您处理存根/模拟
  • 这并不是一个典型的详尽列表。毫无疑问,还有其他的选择,但上面的一个或多个应该可以处理任何常见的用例。

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

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

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

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

  • 为文件系统I/O使用RAM磁盘
  • 对IO、File或FileUtils的存根调用
  • 通过使用文件固定装置来避免问题
  • 通过使用StringIO夹具避免问题
  • 重新编写测试中的类以接受字符串和/或StringIO以及文件对象
  • 使用gem之类的工具为您处理存根/模拟
  • 这并不是一个典型的详尽列表。毫无疑问,还有其他选择,但上面的一个或多个应该处理任何常见用例