2015-11-25 32 views
0

我是新來的紅寶石,我希望有人可以幫助我。我寫使用測試::單元測試和我的測試中,我需要運行一些代碼之前被稱爲斷言所以我overrided像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多個測試班。對於所有人來說,斷言的覆蓋將是相同的。我是否必須將斷言覆蓋複製到每個類的頂部,還是有一種方法讓所有人都能一次性獲得斷言覆蓋?

還有一個問題。如果它發生在整個班級中的任何地方,是否有捕捉錯誤的方法?

一個

回答

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。

+0

我會創建一個新的ruby類並繼承它嗎?對於這個愚蠢的問題抱歉,但我只用了2周的時間在ruby中編寫代碼 – amadain

+0

上面的代碼是'Test :: Unit :: TestCase'本身的代碼。之後,像之前完成的那樣繼承它('class TestSomething mudasobwa

+0

是的,但我在哪裏把上面的代碼?對不起,但是我不清楚 – amadain