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