2010-10-20 89 views
3

我測試的是一個正常運行將數據添加到一個數據庫,但我想測試完成後取出的測試數據。如果測試失敗,則在失敗時退出,永遠不會有機會刪除測試行。如何有PHPUnit的做一些事情,如果斷言失敗

就這麼打分貝唯一的測試,所以我真的不希望在拆解()方法做任何事情。

我測試一個$ obj->保存()類型的方法,節省了從平面文件解析數據。

+0

而不是彎曲PHPUnit,也許你的測試會在CREATE TEMPORARY TABLE上工作? (假設你沒有開發數據庫。) – mario 2010-10-20 15:10:23

+0

然後,我將不得不彎曲實際的PHP代碼,我正在測試$ obj-> save()類型的方法。我結束了調用save(),查詢數據庫並將結果存儲在一個變量中,刪除測試數據,然後最終做出斷言。我覺得phpunit有一些東西可以讓你在測試用例失敗時運行一些代碼,但是在我的生活中我無法在文檔中找到它。 – 2010-10-20 15:16:47

回答

2

您應該使用單獨的數據庫進行開發/生產和測試。結構相同,但每次執行測試時,都會丟棄測試數據庫並從某些數據固件中恢復測試數據。關鍵是,這樣你可以絕對確保你的數據庫每次運行測試時都包含相同的數據集。因此刪除測試數據並不是什麼大不了的事

+0

我同意這是應該如何完成的,我無法想象說服我的辦公室開始這樣做。 – 2010-10-20 15:22:57

2

您是否正在通過Database Testcase Extension數據庫測試的建議的方法?

基本上,如果測試失敗(閱讀,如果沒有錯誤,使得PHPUnit的出口),應該沒有問題,因爲數據庫的測試用例的啓動播種:

默認PHPUnit中的實現將自動截斷指定的所有表,然後按照數據集指定的順序從數據集中插入數據。

所以應該沒有必要做手工。即使出現錯誤,PHPUnit也會在下次運行時清除表格。

2

如果你的數據庫支持事務,你可以發出在測試開始時的start_transaction。如果測試失敗(導致程序退出),將執行隱式回滾並撤消更改。如果測試成功,請發出明確的回滾。

另一種選擇是將斷言封裝在try-catch語句中 - 這可以防止測試停止(以及捕獲屏幕截圖等其他自動功能),並且您可以從此處執行任何所需的操作。

相關問題