2010-08-25 91 views
5

當PHPunit框架不期望發生的錯誤發生時,測試停止,並且PHP引發錯誤,但PHPunit不記錄它是錯誤。我如何確保PHPunit將其記錄爲錯誤。PHPunit - 錯誤

+1

你可以擴展嗎?你在說什麼樣的錯誤? phpunit的預期輸出是什麼,實際輸出是多少? – janmoesen 2010-08-25 20:25:53

+0

所以PHPunit根據我的理解有斷言,失敗和錯誤。所以,讓我們說在代碼中有一個語法錯誤。一個額外的逗號或缺少的分號。這將導致某些測試無法運行,並且測試將停止,但PHPunit不會將其報告爲錯誤,並且php將輸出錯誤,但PHPunit沒有記錄此錯誤。有沒有辦法強制PHPunit記錄類似語法錯誤的東西,而不僅僅是邏輯代碼斷言? – Anthony 2010-08-25 20:50:18

+0

你能爲此提供一個說明性的TestCase嗎(認真) – Gordon 2010-08-25 20:53:29

回答

5

聲明,我是PHPUnit的新手,我試圖弄清楚「發生錯誤時會發生什麼」。

PHPUnit's docs

When the tested code contains PHP syntax errors, the TextUI test runner might exit without printing error information. The standard test suite loader can optionally check the test suite sourcefile for PHP syntax errors, but not sourcefiles included by the test suite sourcefile.

和期權:

--syntax-check   Try to check source files for syntax errors. 
+0

看到我最後一次對原始問題的評論。 (它默認是隱藏的。)似乎沒有PHP語法錯誤;僅僅是一個SQL語法錯誤。 – janmoesen 2010-08-31 07:55:59

+0

@janmoesen我知道,但在OP的評論中還說:「所以我們可以說代碼中有一個語法錯誤,一個額外的逗號或缺少的分號,這會導致某個測試不能運行,並且測試將停止,但PHPunit不會將其報告爲錯誤,並且php將輸出該錯誤,但PHPunit沒有記錄此信息。「 – 2010-08-31 21:10:21

0

什麼OP講的是一個語法或PHP錯誤會殺了PHPUnit的。 PHP致命錯誤會終止PHP解釋器(或導致它至少停止),這意味着PHPUnit無法繼續。

如果你真的想避免這種情況下,你可以在腳本中添加一些以下位。這個腳本假設腳本在你的測試目錄(./)中,並且你的代碼樹以../開頭(類似於普通的ZendFramework 1設置)。不要打擾使用此腳本的代碼覆蓋率,它只會對最後一次運行單元測試正確:

#!/bin/bash 
    for i in $(find ../ -name "*.php"); do 
     msg=`php -l $i` 
     if [ "$?" != "0" ]; then 
      echo $msg; 
     fi 
    done 

    for i in $(find ./ -name "*Test.php"); do 
    echo "Running Test: $i"; 

    phpunit $i 
    done 

HTH。

0

您需要使用正常的PHP錯誤捕獲來捕獲錯誤,以避免在PHP解釋器遇到錯誤時發生操作系統崩潰。

自動化測試應在對您的主要開發流進行承諾之前進行檢查和測試。

我捕獲PHPUnit(phpunit ...> PHPUnit.log)的輸出,然後我從PHPUnit(成功跳過/不完整,OK,FAILURE等)中解析狀態,如果這是沒有找到,那麼我知道PHPUnit沒有完成,併發生錯誤。由於我的PHP配置爲顯示錯誤,錯誤的結果也將被轉儲到終端。

出現錯誤時,我只需將此日誌文件發送給開發團隊或上次更改測試文件的人員進行調查。如果腳本嘗試確定發送郵件的根本原因/人員,則電子郵件的邏輯可能會變得複雜。通常情況下,腳本會通過電子郵件發送給我自己進行調查,並且開發小組會在電子郵件中抄送,以防我不在的情況下立即進行調查。