在我的应用程序中,我有以下代码:

File.open "filename", "w" do |file|
  file.write("text")
end

我想通过RSpec测试这段代码.这样做的最佳实践是什么?

推荐答案

我建议您使用StringIO,并确保您的SUT接受一个要写入的流,而不是文件名.这样,可以使用不同的文件或输出(更可重用),包括字符串IO(适合测试)

因此,在测试代码中(假设SUT实例为sutObject,序列化程序名为writeStuffTo):

testIO = StringIO.new
sutObject.writeStuffTo testIO 
testIO.string.should == "Hello, world!"

字符串IO的行为类似于打开的文件.因此,如果代码已经可以使用文件对象,那么它将使用StringIO.

Ruby相关问答推荐

类 SpecificationPolicy 的超类不匹配

是否有类似于 Ruby 的 Sinatra 的 .NET 框架?

如何在 Ruby 中合并多个哈希?

这些 Ruby 命名空间约定之间有什么区别?

确定字符串数组是否包含ruby中的某个子字符串

Ruby 中的关联数组

在 Pry 中有相当于 next 的吗?

array.include?多个值

Ruby:module、require和include

在 Ruby 中,有没有办法使用 hash.each_with_index do |[k,v], i| 之类的东西?

在 Rails 中,如何向 String 类添加新方法?

如何在没有 Rails 的情况下使用 RSpec?

条件子句中的赋值是好的Ruby风格吗?

将 CSV 文件转换为哈希数组

如何在 Ruby 的 IRB 中启用自动完成

何时使用在 Ruby 中启动子进程的每种方法

向实例对象添加方法

Ruby 实例变量何时设置?

为什么我们在 Ruby 中有 0.0 和 -0.0?

如何创建一个 Gemfile?