我有一个方法可以做这样的事情:
def some_method
chance = rand(4)
if chance == 1 do
# logic here
else
# another logic here
end
end
当我使用RSpec测试这个方法时,它内部的rand(4)
总是生成0。我不是在测试Rails的rand
方法,我是在测试我的方法。测试我的方法的常见做法是什么?
发布于 2013-06-19 23:55:57
我提取随机数生成:
def chance
rand(4)
end
def some_method
if chance == 1 do
# logic here
else
# another logic here
end
end
并将其存根:
your_instance.stub(:chance) { 1 }
这不会将您的测试与rand
的实现细节捆绑在一起,如果您决定使用另一个随机数生成器,您的测试也不会失败。
发布于 2013-06-19 23:44:02
看起来最好的办法是使用存根,而不是真正的rand
。这样,您就能够测试您感兴趣的所有值。由于rand
是在Kernel
模块中定义的,因此您应该使用以下命令对其进行存根:
Kernel.stub(:rand).with(anything) { randomized_value }
在特定的上下文中,您可以使用let
方法定义randomized_value
。
发布于 2019-03-20 08:36:12
这在RSpec中有效:
allow_any_instance_of(Object).to receive(:rand).and_return(1)
https://stackoverflow.com/questions/17195267
复制相似问题