你如何在Ruby解释器中编写和执行Ruby测试?

时间:2010-06-23 13:24:35

标签: ruby unit-testing interpreter

我正在使用lotrepls Ruby解释器,我想在解释器中编写测试,然后我可以编写Ruby代码来传递。在Python中,我可以编写doctests然后编写代码来传递doctests。例如:

>>> b  
1

这测试b = 1,输入b = 1将通过此doctest。

是否有类似的方法在Ruby解释器中编写测试,执行它们,编写代码以传递测试,然后再次执行测试?是否有Ruby doctest等价物?对于我的应用程序,我将在像lotrepls这样的托管解释器中执行测试和代码,而不是在我的本地机器上安装一些东西。

2 个答案:

答案 0 :(得分:2)

RubyDocTest ,但我建议您查看 RSpec 或其他现代BDD / TDD框架。

在那里编写测试也很容易,并且您可以访问复杂和/或自定义断言,而这些断言在doctest中无法真正获得。例如,这是一套针对棒球得分应用的简单测试:

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

  # ...

答案 1 :(得分:0)

这是一个有点老的帖子,但几个月前我也遇到了同样的问题。

John的答案是正确的,但是如果您想使用类似于irb会话的方法,则可以尝试byexample,尤其是supports Ruby

例如,您可以这样编写Markdown文档:

This is an awesome expression:

```ruby
>> 1 + 2
=> 3

```

然后您只需从shell运行

$ byexample -l ruby your-markdown-doc.md
[PASS] Pass: 1 Fail: 0 Skip: 0

您还可以将测试嵌入到Ruby注释中,例如

# square 2
# => 4
def square x
  x * x
end

就是这样。该示例已执行并检查,因此您的文档也可用作回归测试。

免责声明:就像我说的那样,我也有用Ruby进行TDD的愿望,所以我写了byexample。我真的希望比其他人发现的和我一样有用。