上我有以下控制器的測試案例:測試方法叫做產生對象
def test_showplain
Cleaner.expect(:parse).with(@somecontent)
Cleaner.any_instance.stubs(:plainversion).returns(@returnvalue)
post :showplain, {:content => @somecontent}
end
這工作得很好,但我想要的「存根(:plainversion)」是一個「希望(:plainversion)」 。
這裏的控制器代碼:
def showplain
Cleaner.parse(params[:content]) do | cleaner |
@output = cleaner.plainversion
end
end
和清潔很簡單:
class Cleaner
### other code and methods ###
def self.parse(@content)
cleaner = Cleaner.new(@content)
yield cleaner
cleaner.close
end
def plainversion
### operate on @content and return ###
end
end
同樣,我無法弄清楚如何可靠地測試的「清潔劑」,即提供從「解析」方法。有什麼建議麼?
解析方法的好處在於它提供了一個完全可以使用的清理器,並確保調用close。這在Cleaner類中得到了充分測試。儘管上面的代碼顯示了使用Cleaner來檢索「plainvesion」,但還有其他操作可以使用完全準備好的Cleaner來完成。 在控制器中,我們可以創建一個新的清潔器,確保它完全被管理,使用它,然後確保我們關閉它。但看起來如此。 。 。不是Rubyish。特別是當使用解析方法非常方便時,請使用Cleaner並完成它。 – 2010-05-14 14:20:34
也許如果您只是將@output從塊中取出並傳回給調用者,那麼您的控制器方法將更容易測試 - 只需測試清潔器是否已被調用即可完成。如你所說,你的清潔劑在其他地方進行過測試 – ndp 2010-05-14 14:44:53