0
How do I stub/mock a call to the command line with rspec?
提供的答案是:
require "rubygems"
require "spec"
class Dummy
def command_line
system("ls")
end
end
describe Dummy do
it "command_line should call ls" do
d = Dummy.new
d.should_receive("system").with("ls")
d.command_line
end
end
我的問題是:那如何實際測試什麼?
通過製作方法,說:「叫LS系統上的命令」,然後編寫一個測試,說:「我的方法應該調用LS系統上的命令」,如何提供任何好處 ?
如果方法發生變化,我將不得不改變測試,但我不確定我看到了額外的好處。
好吧,現在想象一下,不是你改變了代碼行思路:「如果我調用'dir'而不是'ls'(或其他),他們會得到一個失敗的測試並考慮到他們自己「哦,我們期待我用那種方法叫ls,我想知道爲什麼?」你當然會在你的評論中明確表示出來;;) –
另外:是的,這個給出的例子顯然是一個玩具的例子,非常簡單,幾乎不值得測試...但是大部分測試不會這麼簡單 –
我問的原因是我的例子真的很簡單,我爲Capistrano實現了一個新的SCM,我的自定義SCM類有有些方法只是調用一些簡單的系統命令(相當於例如「git clone」),我可以編寫一個測試來確保「git clone」被調用,但是我沒有看到它的價值。否則在將來需要要改變這種方法,那麼他們也需要改變測試。但是測試只檢查命令是否被調用。那有意義嗎? – ardavis