我的基本逻辑是在某处运行无限循环并尽可能地对其进行测试。拥有无限循环的原因并不重要(游戏的主循环,类似守护进程的逻辑......),我更多地询问关于这种情况的最佳实践。
让我们以这段代码为例:
module Blah
extend self
def run
some_initializer_method
loop do
some_other_method
yet_another_method
end
end
end
我想使用 Rspec 测试该方法Blah.run
(我也使用RR,但普通的 rspec 将是一个可以接受的答案)。
我认为最好的方法是分解更多,比如将循环分成另一种方法或其他东西:
module Blah
extend self
def run
some_initializer_method
do_some_looping
end
def do_some_looping
loop do
some_other_method
yet_another_method
end
end
end
...这允许我们测试run
和模拟循环...但是在某些时候需要测试循环内的代码。
那么在这种情况下你会怎么做呢?
根本不测试这个逻辑,意思是测试some_other_method
&yet_another_method
但不是do_some_looping
?
通过模拟在某个时候循环中断吗?
……别的?