特定のシナリオでは、Ruby で特定のメーカー文字列のバイナリ ファイルを grep します。関連する Mock オブジェクトを Rspec で作成したいと考えています。次のことを試しましたが、役に立ちませんでした。
File.stub!(:exist?).with(<binary_file>).and_return(true)
File.stub!(:read?).with(<binary_file>).and_return('XYZ')
ここで何が欠けていますか?
特定のシナリオでは、Ruby で特定のメーカー文字列のバイナリ ファイルを grep します。関連する Mock オブジェクトを Rspec で作成したいと考えています。次のことを試しましたが、役に立ちませんでした。
File.stub!(:exist?).with(<binary_file>).and_return(true)
File.stub!(:read?).with(<binary_file>).and_return('XYZ')
ここで何が欠けていますか?
まず、!
からを削除し#stub
ます。新しいバージョンの RSpec では使用されません。次に、述語メソッドではないため、でstub(:read?)
ある必要があります。stub(:read)
実装コードを見なくても、これらの変更によって正しい方向に進むはずです。
とはいえ、避けられる場合は、このようなクラス メソッドのスタブ化には反対する傾向があります。これは、テストを通じて状態が漏洩するリスクがかなり大きいためです。代わりに、ファイルを検索して のインスタンスを受け入れるコンポーネントを設計すると、IO
完全に破棄可能なモック オブジェクトを渡すのがはるかに簡単になります。