Для очень простого ввода-вывода, вы можете просто смоделировать File. Итак, учитывая:
def foo
File.open "filename", "w" do |file|
file.write("text")
end
end
тогда:
describe "foo" do
it "should create 'filename' and put 'text' in it" do
file = mock('file')
File.should_receive(:open).with("filename", "w").and_yield(file)
file.should_receive(:write).with("text")
foo
end
end
Однако этот подход не работает при наличии нескольких операций чтения / записи: простой рефакторинг, который не изменяет конечное состояние файла, может привести к сбою теста. В этом случае (и, возможно, в любом случае) вы должны предпочесть ответ @Danny Staple.