是否可以使用标准断言而不是模拟期望?

时间:2013-04-04 15:30:08

标签: ruby rspec mocking stubbing

我正在为Delayed :: Job创建一个自定义作业类,以便我可以观察正在运行的作业并浏览各种生命周期事件。在这种特殊情况下,我对它们何时完成感兴趣,以便我可以维护运行的作业的显式顺序。

生产代码:

class ObservableJob
  def self.new_with_listener(listener)
    job = ObservableJob.new
    job.add_listener(listener)
    job
  end

  def success
    notify_listeners(:on_success)
  end

  def add_listener(listener)
    (@listeners ||= []) << listener
  end

  def notify_listeners(event_name, *args)
    @listeners && @listeners.each do |listener|
      if listener.respond_to?(event_name)
        listener.public_send(event_name, self, *args)
      end
    end
  end
end

测试代码:

describe ObservableJob do
  it "provides notification on job success" do
    notifier = stub{:on_success}
    notifier.should_receive(:on_success)
    ObservableJob.new_with_listener(notifier).success
  end
end

我目前正在使用模拟期望来确保正确回调我的侦听器对象。这很好用。但是,我倾向于更喜欢我的测试有明确的断言,而不是依赖于隐含的模拟期望。是否可以在这里使用显式断言?

1 个答案:

答案 0 :(得分:0)

在对此进行更多研究之后,在这种情况下不可能使用显式断言。