2016-05-30 18 views
0

Ruby on RailsでStringIOとは何ですか?RSpecテスト(Ruby on Rails)の文脈で `StringIO`とは何ですか?

私はStringIOを参照している別の答えを理解しようとしていますが、それは私の頭の上です。

私はこのためにStringIOを使用して、SUT ではなく、ファイル名のに書き込むためにストリームを受け入れることを確認することを示唆しています。

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

出典:StringオブジェクトのRspec: how to test file operations and file content

Ruby-doc.org

擬似I/O。

出典:http://ruby-doc.org/stdlib-1.9.3/libdoc/stringio/rdoc/StringIO.html

Robots.thoughtbot

これは、我々は、ディスクからの実際のファイルを読み込む代わりに のはStringIOを注入かもしれないテストでは一般的です。

出典:https://robots.thoughtbot.com/io-in-ruby#stringio

私の場合:私のアプリケーションで

File.open("data.dat", "wb") {|f| f.write(snapshot)} 

私は上記をテストしたいが、私はまだStringIOはRSpecのテストを実行するに適用されるか困惑しています。

StringIOでいくつかの経験をお持ちの方は、何か指針を与えることができますか?

答えて

2

StringIOは、IOオブジェクトの文字列ベースの置き換えです。これはファイルと同じように動作しますが、文字列としてメモリに保持されます。

私はそれが本当に適用可能だとは思わない。少なくともあなたの現在のコードではありません。これは、File.open呼び出しがIOオブジェクトを作成し、すぐに何かを実行するためです。

def write_data(f) 
    f.write(snapshot) 
end 

# your code would be 
f = File.open("data.dat", "wb") 
write_data(f) 

# test would be 
testIO = StringIO.new 
write_data(testIO) 
testIO.string.should == "Hello, world!" 
:たとえば、あなたがこのような何かを持っていた

場合

関連する問題