加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – 测试方法是否被MiniTest调用x次更好的方法?

发布时间:2020-12-17 02:23:36 所属栏目:百科 来源:网络整理
导读:今天我开始介绍minitest的一些基本实现,最后想出一个方法来测试一个类的方法是否被调用两次. 在RSpec我会做类似的事情: expect(@foo).to receive(:some_heavy_calculation).once2.times { @foo.bar } 现在,我已经为MiniTest提出了以下实现,但是我不确定这是
今天我开始介绍minitest的一些基本实现,最后想出一个方法来测试一个类的方法是否被调用两次.

在RSpec我会做类似的事情:

expect(@foo).to receive(:some_heavy_calculation).once
2.times { @foo.bar }

现在,我已经为MiniTest提出了以下实现,但是我不确定这是否是实现它的方法,因为这个.这就是我所拥有的

require 'minitest/autorun'

class Foo
  def bar
    @cached_value ||= some_heavy_calculation
  end

  def some_heavy_calculation
    "result"
  end
end

class FooTest < Minitest::Test
  def setup
    @foo = Foo.new
  end

  def cache_the_value_when_calling_bar_twice
    mock = Minitest::Mock.new
    mock.expect(:some_heavy_calculation,[])
    @foo.stub :some_heavy_calculation,-> { mock.some_heavy_calculation } do
      2.times { assert_equal_set @foo.bar,[] }
    end
    mock.verify
  end
end

我是否真的必须用mock来实现它,这将是方法主题的存根的结果,必须被调用x次?

解决方法

我不得不做类似的事情.这就是我最终的结果……

def cache_the_value_when_calling_bar_twice
  count = 0
  @foo.stub :some_heavy_calculation,-> { count += 1 } do
    2.times { assert_equal_set @foo.bar,[] }
  end
  assert_equal 1,count
end

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读