我是红宝石的新手,我希望有人可以帮助我。我正在使用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
答案 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。