2010-02-12 93 views
2

我使用Test::Unit::TestCase來編寫一些單元測試。目前,我有一個setup函數,用於移動和修改磁盤上的一些夾具文件和文件夾。 (目前這是一個必要的罪惡。)如果測試崩潰,teardown方法不會被調用,從而留下文件和文件夾。下一次我運行一個測試時,它會抱怨這個文件夾已經存在(Errno::EEXIST),這讓我不得不停下來擺脫剩下的文件。確保teardown在Test :: Unit :: TestCase中運行?

我該如何ensureteardown總是運行? (ensurefinally在某些其他語言中的意思相同。)

+0

你是什麼意思「如果一個測試崩潰」?口譯員中止? – philant 2010-02-12 20:22:26

+0

我的意思是它出錯了,例外說。 – 2010-02-12 20:23:58

+0

你可以發表一個例子嗎?引發異常或語法錯誤被框架捕獲,並調用拆卸方法。你仔細檢查方法名稱是否拼寫完好? – philant 2010-02-12 21:25:42

回答

3

如何使setup()做一些清理工作,以便即使文件仍然存在,它也能正常工作?

+1

是的,做一個清理程序,並拆卸和設置都稱它。 – Shadowfirebird 2010-02-12 20:22:13

+0

這不是一個壞主意。我會試試看。 – 2010-02-12 20:24:37

+0

這似乎工作得很好。確保'清理'不會錯誤地被調用兩次是有點痛苦,但它工作得很好。 – 2010-02-15 15:39:09

1

如何在setup添加上退出掛鉤,然後在teardown將其取出:

class MyTestCase < Test::Unit::TestCase 

    def clean_up! 
    ... 
    end 

    def setup 
    at_exit do 
     unless @cleaned_up 
     clean_up! 
     end 
    end 
    end 

    def teardown 
    clean_up! 
    @cleaned_up = true 
    end 

end 
相關問題