如何在测试中绕过对super方法的调用

时间:2013-02-12 13:50:04

标签: ruby mocha

我有一个像这样的基本结构

class Automobile
  def some_method
    # this code sets up structure for child classes... I want to test this
  end
end

class Car < Automobile
  def some_method
    super
    # code specific to Car... it's tested elsewhere so I don't want to test this now
  end
end

class CompactCar < Car
  def some_method
    super
    # code specific to CompactCar... I want to test this
  end
end

在不运行CompactCar代码的情况下,测试AutomobileCar的推荐方法是什么? Automobile#some_method提供了子类所需的结构,因此我希望始终对其进行测试,但Car's功能在其他地方进行了测试,我不想重复工作。

一种解决方案是使用class_eval覆盖Car#some_method,但这并不理想,因为覆盖的方法在我的测试期间保持不变(除非我重新加载原始库文件使用设置/拆卸方法......一种丑陋的解决方案)。此外,简单地将调用存根到Car#some_method似乎不起作用。

是否有更清洁/更普遍接受的方式?

1 个答案:

答案 0 :(得分:1)

只需将特定代码放入单独的方法中即可。您似乎没有使用super中的任何内容。除非你是?

class CompactCar < Car
  def some_method
    super
    compact_car_specific_code
  end

  # Test this method in isolation.
  def compact_car_specific_code
    # code specific to CompactCar... I want to test this
  end
end