2010-03-04 30 views
2

一個搜索產生一對夫婦的追趕上致命的異常問題,但是這一次是專門針對使用SimpleTest的。 (我知道SimpleTest已經過時了,但讓PHP-Unit在我的配置上工作是另一個問題)。PHP和SimpleTest的 - 運行拆解(),即使有一個致命的異常

我想獲得的刪除()方法來工作,即使有一個致命的例外,因爲我在安裝過程中在數據庫中創建一些測試行和拆除過程中刪除它們。但是,當SimpleTest發生致命異常時,teardown()永遠不會運行。

有沒有辦法讓拆解()來儘管致命exeception運行?

回答

3

沒有可以使用的 「register_shutdown_fuction」 鉤:

register_shutdown_function(array($this, 'shutdownHandler')); 

在 「shutdownHandler」 你可以寫:

error_get_last() && $this->tearDown(); 
1

當一個致命錯誤發生時,PHP過程結束 - 這意味着沒有辦法有同樣的PHP程序執行任何種類的addionnal代碼,因爲它已不再存在。

這也將意味着:

  • 你可能沒有得到太多的報告
  • 是一個致命錯誤結束的一前一後的測試將不會運行
  • 你有一個測試這是失敗的 - 很糟糕。


你應該可以解決問題:在你的應用程序中的致命錯誤是;它的偉大,你與你的自動化測試檢測到它,當然 - 但下一步是讓它離開;-)


正如你不能運行在同一進程了PHP代碼已經去世,只有我看到的解決方案是啓動另一個進程,以運行清理代碼。

的基本想法是:

  • 啓動你的測試
  • 使用另一個完全不同的,腳本,運行清理作業

當然,這意味着在所有測試運行之後,清理工作只能進行一次;但我認爲這比沒有好。


現在,如何做,在一個自動化的方式?

最簡單的解決方案可能會使用一個shell腳本,運行這兩個命令;像這樣,我會說:

#!/bin/sh 

php /.../launch-tests.php 

php /.../cleanup.php 

並通過啓動該shell腳本運行您的測試。