使用 Minitest 测试文件写入

Using Minitest to Test File Write

有没有办法使用 minitest mock/stub 文件读取和写入(文本文件)而不实际存在它们?

实际代码类似于

def write_to_file(filename)

 f = File.open(filename,"w")

 f.puts "hello world"

 f.close
end

我真的不知道如何尝试,因为我找不到任何模拟文件 IO 的示例,只能比较变量

如果我要按照你的建议去做,我会把 File.open 存根到 return 一个像这样的模拟:

def test_something_that_reads_a_file
  file_mock = Minitest::Mock.new
  file_mock.expect(:readline, "It was the best of times...")
  File.stub(:open, file_mock) do
    # your test logic here
  end
  file_mock.verify
end

您在某些时候仍然遇到 returning EOF 的问题,但这对您来说是否是个问题取决于上下文,我没有给出您所写的内容。

但是有几个原因导致我可能永远不会这样处理这个问题。

  1. 不要嘲笑你不拥有的东西。是的,File#readline 的语义明天可能不会改变,但是对您无法控制的接口做出假设是一种不好的做法。
  2. 对我来说,这看起来像是一种非 public 方法。如果我是对的,那么我根本不会测试它。私有方法是不需要自己测试的实现细节。如果您坚决不在这里做任何 I/O,我宁愿存根该方法的结果,而不是我上面所做的。

我将采用的方法是包含一个小的测试文件并实际从中读取。因此,您的测试将更容易理解。