我正在構建一個非常小的寶石來讀取圖像數據格式,並返回圖像作爲一個無聊的紅寶石數組,或一個不錯的narray,這取決於a)是否已經請求了一個敘述和b)如果該narray寶石是可用和需要。我的設計是,如果有人想使用他們可以的,但他們必須事先明確要求。當讀取圖像數據時,我檢查是否定義了narray(已經被要求),並且簡單地向msg實例變量添加警告以用於以後的打印/記錄。顯式測試庫/ gems是否通過在rspec中存根來定義?
我想包括一個測試(我使用RSpec2和摩卡嘲笑),但我有點新的實際使用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
...但我必須失去使用存根的點,因爲這個磕碰是不會改變的定義的行爲?無論存根,定義?返回「真實」值(即,如果我取消註釋代碼中的要求,定義?爲假,並且我的警告已成功添加)。
這是否值得測試?有一個更好的方法嗎?任何想法將不勝感激。謝謝,
嗯,這是有道理的。我很習慣操作員是合成糖的方法,我只是假設發生了什麼事情。但是這給了我一個想法 - 我可以添加一個基本上只返回defined的方法,因爲我可以存儲這個,我不確定這比.remove_const更不容易,只需要爲測試改變我的代碼。我可能只是用你的方法去。謝謝! – 2011-01-30 00:44:29