私は非常に小さなgemを作成して、画像データ形式を読み取り、a)narrayが要求されているかどうか、b)narray gemが利用可能かどうかに応じて、退屈なルビー配列または素敵なnarrayとして画像を返します。必要。私の設計では、誰かがnarrayを使用したい場合は使用できますが、事前に明示的に要求する必要があります。画像データを読み取るとき、narrayが定義されているかどうかを確認し(必須)、後で印刷/ログ記録するためにmsgインスタンス変数に警告を追加するだけです。
このテストを含めたいのですが(モックにrspec2とmochaを使用しています)、実際にrspecを使用するのは少し新しいです。私は次のようなことをしたいと思います:
it "should return an narray if requested" do
obj = NRead.new(@string, :bin => true, :narray => true)
obj.image_narray.should_not be_nil
end
it "should add an NArray Install message and not set the image_narray if NArray was not available" do
Object.stubs(:defined?).with(:NArray).returns(:false)
obj = NRead.new(@string, :bin => true, :narray => true)
obj.msg.should_not be_empty
obj.msg.grep(/Please gem install narray/).empty.should be_false
obj.image_narray.should be_nil
obj.image_ruby_array.size.should == @fixture_image_length
end
...しかし、このスタブは定義済みの動作を変更しないため、スタブを使用するポイントを見逃しているに違いありません。スタブに関係なく、定義されていますか?「実際の」値を返します(つまり、コードでrequireのコメントを外すと、defined?はfalseになり、警告が正常に追加されます)。
これはテストする価値さえありませんか?これを行うためのより良い方法はありますか?どんな考えでもいただければ幸いです。ありがとう、