RSpec:模拟,存根和验证

时间:2012-07-29 16:49:37

标签: ruby testing rspec tdd rspec-mocks

我正在为Cinch(IRC机器人)编写一个插件,并试图为它编写一些RSpec测试。

然而,我正试图掌握RSpec,并嘲笑这个插件的外部依赖。我现在想要测试两种不同的东西 - 它向人们问好,并且它跟踪了你的问候。

所以我有一个方法say_hello,它需要Cinch::Message。模拟这个特定类的最简单方法是什么?我已经习惯了Mockito和Java,所以我习惯于模拟一个特定的类。

如何模仿Cinch::Message?在我的第一次测试中,我想断言在该消息上调用reply方法。在下一篇文章中,我只是希望它像Cinch::Message那样回复,因为我只关心类的跟踪,而不是与消息的交互。

我刚刚开始使用RSpec,所以也许我错过了一些基本的东西。我应该使用模拟吗?存根?

谢谢!

1 个答案:

答案 0 :(得分:3)

首先,文档将是一个不错的起点,请参阅:https://www.relishapp.com/rspec/rspec-mocks/v/2-11/docs/message-expectations

..这就是你的测试的样子:

it 'should call #reply on the message'
  message = double('cinch message')
  message.should_receive(:reply)
  object_under_test.say_hello(message)
end