2010-06-23 74 views
0

我正在使用lotrepls Ruby解釋器,我想在解釋器中編寫測試,然後我可以編寫要通過的Ruby代碼。在Python中,我可以編寫doctests,然後編寫代碼來傳遞doctests。例如:如何在Ruby解釋器中編寫和執行Ruby測試?

>>> b 
1 

這測試b = 1,輸入b = 1將得到這個doctest通過。

是否有類似的方式在Ruby解釋器中編寫測試,執行它們,編寫代碼來通過測試,然後再次執行測試?有沒有Ruby doctest的等價物?對於我的應用程序,我將在像lotrepls這樣的託管解釋器中執行測試和代碼,而不是在本地機器上安裝某些東西。

回答

2

RubyDocTest,但我會鼓勵你看看像RSpec或另一種現代BDD/TDD的框架。

在這裏編寫測試也很容易,並且您可以訪問複雜的和/或自定義的斷言,這些斷言在文檔測試中無法真正得到。例如,下面是一個簡單的針對棒球得分應用程序的測試:

describe BaseballScorer do 
    before :each do 
    @s = Scorer.new(Game.new) 
    end 

    it "should score a 0-0 game when no runs are hit" do 
    @s.home.score.should == @s.away.score.should == @s.total_runs 
    end 

    it "should record runs that are hit" do 
    @s.game.run_hit(:away) 
    @s.away.runs.should == @s.away.score.should == 1 
    end 

    # ... 
+0

謝謝約翰。我能否在交互式會話中執行規範而不讀取文件中的規格?我可以在IRB會話中輸入上面的代碼,然後運行如下所示的代碼: >> spec BaseballScorer#而不是>> spec BaseballScorer.rb – Chris 2010-06-23 16:48:45

+0

規範與本身並不關聯特定的類。這不是'描述BaseballScorer',我可以寫'描述'我們的棒球得分算法''。您可以使用SpecRunner在特定文件中運行規格;如果你實例化其中的一個,那麼你可以運行測試。所以CLI接口比doctest有點難。但是你可以運行一個Rake任務來運行你的規格,如果有幫助的話。 – 2010-06-23 17:20:39

+0

謝謝約翰。實例化SpecRunner實例並將規範傳遞給它的最簡單方法是什麼? – Chris 2010-06-29 07:09:15