首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何用RSpec测试` `rand()`?

如何用RSpec测试` `rand()`?
EN

Stack Overflow用户
提问于 2013-06-19 23:28:42
回答 3查看 9.9K关注 0票数 21

我有一个方法可以做这样的事情:

代码语言:javascript
复制
def some_method
  chance = rand(4)
  if chance == 1 do
    # logic here
  else
    # another logic here
  end
end

当我使用RSpec测试这个方法时,它内部的rand(4)总是生成0。我不是在测试Rails的rand方法,我是在测试我的方法。测试我的方法的常见做法是什么?

EN

回答 3

Stack Overflow用户

发布于 2013-06-19 23:55:57

我提取随机数生成:

代码语言:javascript
复制
def chance
  rand(4)
end

def some_method
  if chance == 1 do
    # logic here
  else
    # another logic here
  end
end

并将其存根:

代码语言:javascript
复制
your_instance.stub(:chance) { 1 }

这不会将您的测试与rand的实现细节捆绑在一起,如果您决定使用另一个随机数生成器,您的测试也不会失败。

票数 15
EN

Stack Overflow用户

发布于 2013-06-19 23:44:02

看起来最好的办法是使用存根,而不是真正的rand。这样,您就能够测试您感兴趣的所有值。由于rand是在Kernel模块中定义的,因此您应该使用以下命令对其进行存根:

代码语言:javascript
复制
Kernel.stub(:rand).with(anything) { randomized_value }

在特定的上下文中,您可以使用let方法定义randomized_value

票数 12
EN

Stack Overflow用户

发布于 2019-03-20 08:36:12

这在RSpec中有效:

代码语言:javascript
复制
allow_any_instance_of(Object).to receive(:rand).and_return(1)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17195267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档