我正在使用lotrepls Ruby解释器,我想在解释器中编写测试,然后我可以编写Ruby代码来传递。在Python中,我可以编写doctests然后编写代码来传递doctests。例如:
>>> b
1
这测试b = 1,输入b = 1将通过此doctest。
是否有类似的方法在Ruby解释器中编写测试,执行它们,编写代码来传递测试,然后再次执行测试?是否有Ruby doctest等价物?对于我的应用程序,我将在像lotrepls这样的托管解释器中执行测试和代码,而不是在我的本地机器上安装一些东西。
有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
# ...
这是一个有点旧的帖子,但几个月前我遇到了同样的问题。
约翰的答案是正确的,但如果你想使用类似于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。我真的希望比其他人更有用,而且我做到了。