1

我有这样的基本结构

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而不Automobile运行代码CarAutomobile#some_method提供子类所需的结构,因此我想始终对其进行测试,但Car's功能在其他地方进行了测试,我不想重复努力。

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

是否有更清洁/更普遍接受的方式来做到这一点?

4

1 回答 1

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
于 2013-02-12T14:09:37.387 回答