使用Minitest测试文件写入

时间:2015-11-10 20:43:52

标签: ruby ruby-on-rails-4 minitest

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

实际代码类似于

def write_to_file(filename)

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

 f.puts "hello world"

 f.close
end

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

1 个答案:

答案 0 :(得分:1)

如果我打算按照你的建议行事,我会将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 发送给我一个类似的模拟:

EOF

你仍然有在某个时刻返回File#readline的问题,但是否这对你来说是一个问题取决于你没有给出你所写的内容。

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

  1. 不要嘲笑你不拥有的东西。是的,using (var command = new SqlCommand("dbo.test", connection) { CommandType = CommandType.StoredProcedure }) { connection.Open(); Console.WriteLine("ConnectionTimeout: {0}", connection.ConnectionTimeout); command.CommandTimeout = 120; command.ExecuteNonQuery(); Console.WriteLine("Finished"); connection.Close(); } 的语义明天可能不会改变,但是假设一个不受你控制的界面是一种不好的做法。
  2. 对我来说,这就像一个非公开的方法。如果我是对的,那我根本就不会测试它。私有方法是不需要自己的测试的实现细节。如果你没有在这里做任何I / O,我宁愿存在方法的结果,而不是我上面所做的。
  3. 我将采用的方法是包含一个小测试文件并实际读取它。因此,您的测试将更容易理解。