如何在Mocha中对mocks进行子类化?

时间:2014-02-04 13:38:04

标签: ruby mocha

我需要模拟一个对象,该对象的类应该定义了一些常量,例如:

class Driver
  DRIVER_NAME = "google"
end

我不想在单元测试中简单地使用该类的实例,因为初始化很昂贵,而且它有一个简单的接口,所以它最适合模拟。如果我可以简单地继承Mocha::Mock并添加一些完美的常量。我还没有找到实例化这些子类的方法。它们需要“mockery”作为初始化参数。我试过了:

TestDriver.new(self.mock.instance_method_get(:@mockery))

非常有趣的结果是:

  

意外调用:#< Mock:0x35c0690> .instance_method_get(:@ mockery)

摩卡的来源非常复杂和纠结。我甚至找不到为每个mock对象创建Minitest::Test的点。

那么如何在Mocha中对mocks进行子类化?有直接的方式吗?


我的备份解决方案是简单地使用上面显示的三行类driver.stubs(:name)...而不是使用模拟,但这感觉就像是解决问题的错误方法。

1 个答案:

答案 0 :(得分:0)

我(偶然)意识到我可以在任何物体上召唤expects,而不仅仅是嘲笑......

class TestDriverManager
  def test_something
    foo = TestDriver.new
    foo.expects(:valid?).returns(true).once

    # ...
  end

  class TestDriver
    DRIVER_NAME = "test"
    ...
  end
end

因此,至少在我的情况下,没有必要继承mock。