5

我有这样的方法

class SomeClass
  def self.test_method
    while(true)
      make_heavy_lifting
      sleep(60*60)
    end
  end
end

我如何为此方法编写测试。

我想到的一种解决方案是存根 sleep 方法,它有效,但我无法存根 while 关键字。请建议对具有无限循环的方法进行单元测试的最佳实践。

4

2 回答 2

6

也许您可以将除了 sleep 之外的所有内容移到另一个方法中,然后只为该方法编写规范,我认为您真的不需要测试您的方法是否具有 while 循环和睡眠(您不需要测试每一行代码:P) 但是如果你想检查这个问题,它有一些你可以尝试的东西 测试“无限循环”时的最佳实践是什么?

于 2012-11-13T18:01:26.897 回答
5

为了测试这个我存根:loop并使用它而不是while(true)

班级:

class SomeClass
  def self.test_method
    loop do
      make_heavy_lifting
      sleep(60*60)
    end
  end
end

规格:

describe SomeClass do
  describe '#test_method' do
    expect(SomeClass).to receive(:loop).and_yield
    expect(SomeClass).to receive(:make_heavy_lifting)
    expect(SomeClass).to receive(:sleep).with(60*60)
end

这样它只会迭代一次。

编辑:似乎在另一个问题中也建议了这一点

于 2016-01-08T04:52:57.050 回答