2012-03-21 99 views
0

我有一段代碼來測試未包裹在方法中的代碼。它本身就是一個獨立的Ruby類。使用RSpec測試執行代碼

begin 
    # Do stuff - bunch of Ruby code 
end 

這不是一個Rails應用程序。這是一個獨立的Ruby類。我不想在我的rspec測試中執行整個開始結束語句。你如何測試這樣的事情?應該使用mocks/stub來完成嗎?我問了幾個人,但他們也不知道答案。

+1

如果你不想測試你的方法的一部分,那麼你的方法應該分成兩個(或更多)方法。 – 2012-03-21 23:16:12

+0

哦,這根本不是一種方法。它只是在文件末尾有一個begin end語句,它包含了代碼。所以,它就像是:開始一些Ruby代碼結束 – 2012-03-21 23:23:02

+0

如果你不想要某些東西成爲代碼單元,那麼不要讓它成爲一個單一的代碼單元。 – 2012-03-21 23:26:57

回答

1

我發現,如果你可以將行爲封裝在方法或模塊中,這樣更容易測試,但這取決於你試圖執行的代碼。如果代碼以公開的方式改變了類,那麼你可以編寫測試來了解類在內存中的行爲如何。例如:

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 

您能否提供一些關於您想要在班級中做什麼的背景知識?

+0

我想在開始和結束語句之間做一堆文件操作。所以,我正在檢查一個文件是否存在,如果是的話,執行一段代碼,如果它不存在,執行另一段代碼。 – 2012-03-21 23:32:35