可以共享通用的覆盖代码吗
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。
我是 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。