我有一段代碼來測試未包裹在方法中的代碼。它本身就是一個獨立的Ruby類。使用RSpec測試執行代碼
begin
# Do stuff - bunch of Ruby code
end
這不是一個Rails應用程序。這是一個獨立的Ruby類。我不想在我的rspec測試中執行整個開始結束語句。你如何測試這樣的事情?應該使用mocks/stub來完成嗎?我問了幾個人,但他們也不知道答案。
我有一段代碼來測試未包裹在方法中的代碼。它本身就是一個獨立的Ruby類。使用RSpec測試執行代碼
begin
# Do stuff - bunch of Ruby code
end
這不是一個Rails應用程序。這是一個獨立的Ruby類。我不想在我的rspec測試中執行整個開始結束語句。你如何測試這樣的事情?應該使用mocks/stub來完成嗎?我問了幾個人,但他們也不知道答案。
我發現,如果你可以將行爲封裝在方法或模塊中,這樣更容易測試,但這取決於你試圖執行的代碼。如果代碼以公開的方式改變了類,那麼你可以編寫測試來了解類在內存中的行爲如何。例如:
class Foo
attr_accessor :bar
end
describe Foo
it "should have an attr_accessor bar" do
foo = Foo.new
foo.bar = "baz"
foo.bar.should == "baz"
end
end
如果您以私人方式改變班級,這會變得更加困難。
我以前有幸通過將這種類型的行爲重寫爲可以明確調用的方法。它使測試變得更加簡單,並且在解決問題時更容易理解時序。例如:
class Foo
def self.run
# do stuff
end
end
您能否提供一些關於您想要在班級中做什麼的背景知識?
我想在開始和結束語句之間做一堆文件操作。所以,我正在檢查一個文件是否存在,如果是的話,執行一段代碼,如果它不存在,執行另一段代碼。 – 2012-03-21 23:32:35
如果你不想測試你的方法的一部分,那麼你的方法應該分成兩個(或更多)方法。 – 2012-03-21 23:16:12
哦,這根本不是一種方法。它只是在文件末尾有一個begin end語句,它包含了代碼。所以,它就像是:開始一些Ruby代碼結束 – 2012-03-21 23:23:02
如果你不想要某些東西成爲代碼單元,那麼不要讓它成爲一個單一的代碼單元。 – 2012-03-21 23:26:57