如何在rspec测试中巧妙存根并模拟rand函数的随机行为?
- 内容介绍
- 文章标签
- 相关推荐
本文共计337个文字,预计阅读时间需要2分钟。
我在使用Ruby 2.3.4和rspec 3.6.0编写测试。我正在为使用rand(10000..99999)的对象编写测试。在蓝特上找不到任何文档,我想知道这是什么对象。我尝试了对核心对象、对象和随机数进行存根,但我没有尝试过导出。
我正在为使用rand(10000..99999)的对象编写测试.我在兰特上找不到任何文档,看看它是什么对象.我尝试了对内核,对象和随机进行存根(见下文),但我没有尝试导致rand被对象存根.
allow(Kernel).to receive(rand).and_return(12345) allow(Object).to receive(rand).and_return(12345) allow(Random).to receive(rand).and_return(12345)
任何帮助表示赞赏.
rand确实在内核模块中实现.但是,在代码中调用方法时,方法接收器实际上是您自己的对象.假设以下课程:
class MyRandom def random rand(10000..99999) end end my_random = MyRandom.new my_random.random # => 56789
当调用my_random.random时,rand方法的接收器(即调用该方法的对象)也是my_random实例,因为这是MyRandom #random方法中的自身对象.
在测试时,你可以在这个实例上存根rand方法:
describe MyRandom do let(:subject) { described_class.new } describe '#random' do it 'calls rand' do expect(subject).to receive(:rand).and_return(12345) expect(subject.random).to eq 12345 end end end
本文共计337个文字,预计阅读时间需要2分钟。
我在使用Ruby 2.3.4和rspec 3.6.0编写测试。我正在为使用rand(10000..99999)的对象编写测试。在蓝特上找不到任何文档,我想知道这是什么对象。我尝试了对核心对象、对象和随机数进行存根,但我没有尝试过导出。
我正在为使用rand(10000..99999)的对象编写测试.我在兰特上找不到任何文档,看看它是什么对象.我尝试了对内核,对象和随机进行存根(见下文),但我没有尝试导致rand被对象存根.
allow(Kernel).to receive(rand).and_return(12345) allow(Object).to receive(rand).and_return(12345) allow(Random).to receive(rand).and_return(12345)
任何帮助表示赞赏.
rand确实在内核模块中实现.但是,在代码中调用方法时,方法接收器实际上是您自己的对象.假设以下课程:
class MyRandom def random rand(10000..99999) end end my_random = MyRandom.new my_random.random # => 56789
当调用my_random.random时,rand方法的接收器(即调用该方法的对象)也是my_random实例,因为这是MyRandom #random方法中的自身对象.
在测试时,你可以在这个实例上存根rand方法:
describe MyRandom do let(:subject) { described_class.new } describe '#random' do it 'calls rand' do expect(subject).to receive(:rand).and_return(12345) expect(subject.random).to eq 12345 end end end

