可以共享共同的重写代码

时间:2015-11-25 07:27:56

标签: ruby unit-testing assert

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

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多个测试类。对于所有这些,断言覆盖将是相同的。我是否必须将断言覆盖复制到每个类的顶部,或者是否有办法让所有人一次性获得断言覆盖?

还有一个问题。如果它出现在整个班级的任何地方,有没有办法捕获错误?

A

1 个答案:

答案 0 :(得分:1)

我不确定你为什么不想使用before filter,但问题的答案是:因为ruby类是开放的,所以可以做以下事情。

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

完成后,任何派生类都会在调用原始方法之前调用my_code

要在班级范围内捕捉错误是不可能的,AFAIK。