可以共享通用的覆盖代码吗

can common overriding code be shared

我是 ruby 的新手,我希望有人能帮助我。我正在使用 test::unit 编写测试,在我的测试中我需要 运行 在调用断言之前编写一些代码,所以我覆盖了断言方法,如下所示:

class TestSomething < Test::Unit::TestCase

  def assert_equal(expected, actual, message = nil)
    mycode ..
    super(expected, actual, message)
  end

  def assert(object, message)
    my code ...
    super(object, message)
  end

  def assert_not_nil(object, message = "")
    my code ...
    super(object, message)
  end

  def setup

  end

  def test_case1

  end

  def test_case1

  end

  def teardown

  end

end

以上结构工作正常,断言调用我的代码。问题是我有 100 个测试 classes。断言覆盖对所有这些都是相同的。我是否必须将断言覆盖复制到每个 class 的顶部,或者是否有一种方法可以让它们一次性获得断言覆盖?

还有一个问题。如果错误发生在整个 class?

的任何地方,有没有办法捕获错误?

一个

我不确定你为什么不想使用 before filter,但问题如前所述有一个答案:因为 ruby classes 是开放的,一个人可能执行以下操作。

class Test::Unit::TestCase
  # store the original
  alias_method :assert_equal_original, :assert_equal
  # override
  def assert_equal *args
    # mycode ..
    assert_equal_original *args
  end
  # the same for other methods
end

完成后,任何派生的 class 将在调用原始方法之前调用 my_code


要捕获 class 范围内的错误是不可能的,AFAIK。