【问题标题】:Unit test using flexmock doesn't fail as expected使用 flexmock 的单元测试没有按预期失败
【发布时间】:2013-03-06 15:59:00
【问题描述】:

我正在尝试使用 flexmocktest/unit 来为我的单元测试创​​建模拟对象。这是我正在测试的课程:

class Cave
  def hunt
    # not yet implemented
  end
end

这是我的单元测试(注意这个方法只是测试用例中众多方法之一):

require 'test/unit'
require 'flexmock/test_unit'
require 'cave'

def test_play
  hunter = flexmock()

  cave = Cave.new
  cave.hunter = hunter

  hunter.should_receive(:turn).with(FlexMock.any).at_least.once

  cave.hunt
end

该测试应该验证hunt 方法是否将turn 消息发送到分配给cavehunter 属性的对象至少一次。

如果我正确理解了文档,flexmock 会与单元测试框架结合并自动验证测试中定义的期望。因此,我预计上述测试会失败,因为方法hunt 还没有发送turn。但是,测试成功。

我错过了什么吗?

更新:我设置了一个新文件,其中仅包含一个最小测试,以查看 flex mock 是否能按预期工作。以下测试产生预期结果,即失败:

require 'test/unit'
require 'flexmock/test_unit'

class TestFoo < Test::Unit::TestCase
  def test_foo
    m=flexmock()
    m.should_receive(:bar).and_return(17).once
  end
end

【问题讨论】:

    标签: ruby unit-testing mocking


    【解决方案1】:

    我认为你的设置有问题!

    按照文档和您的示例,我得到以下输出:

    ruby test_foo.rb 
    Run options: 
    
    # Running tests:
    
    [1/1] TestFoo#test_foo = 0.00 s
      1) Failure:
    test_foo(TestFoo) [/Users/paule/.rbenv/versions/2.0.0-p0/lib/ruby/gems/2.0.0/gems/flexmock-1.3.1/lib/flexmock/test_unit_integration.rb:53]:
    in mock 'unknown': Method 'bar(*args)' called incorrect number of times
    1 matching call expected
    0 matching calls found
    No messages have been received
    
    
    Finished tests in 0.011163s, 89.5817 tests/s, 0.0000 assertions/s.
    1 tests, 0 assertions, 1 failures, 0 errors, 0 skips
    
    ruby -v: ruby 2.0.0p0 (2013-02-24 revision 39474) [x86_64-darwin12.2.1]
    

    这表明使用 ruby​​ 2.0.0p0 一切正常。

    【讨论】:

    • 我相信你是对的——在另一个测试用例中这是有效的。我不知道有什么区别,但不值得努力找出,因为无论如何我都会切换到 rspec。谢谢!
    • 当 flexmock didn't run inside minitest 时,我从 flexmock 切换到 rr
    猜你喜欢
    • 2017-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 2011-05-02
    相关资源
    最近更新 更多