我使用PHPUnit的框架,我有這樣的代碼:的PHPUnit和模具功能
public function A() {
try {
(...some code...)
die (json_encode ($data));
}
catch (Exception $e) {
die(false);
}
}
此功能是通過AJAX調用,我不能替換回報死。問題是: 如何使用這樣的代碼進行單元測試?
我不能用這個,斷言。
謝謝。
我使用PHPUnit的框架,我有這樣的代碼:的PHPUnit和模具功能
public function A() {
try {
(...some code...)
die (json_encode ($data));
}
catch (Exception $e) {
die(false);
}
}
此功能是通過AJAX調用,我不能替換回報死。問題是: 如何使用這樣的代碼進行單元測試?
我不能用這個,斷言。
謝謝。
不能測試...
有時候單元測試帶來了問題,這樣的(不可測的情況下)。這通常意味着問題不在於測試,而在於代碼和架構。
在這裏,你不應該使用die
功能(實際上你不應該使用die
返回一個HTTP響應),但echo
的JSON,然後讓腳本完成正確(或return
的JSON和echo
它的地方其他)。
爲了測試這個,你可以捕獲輸出並檢查它(這是一個基本的例子,我猜測得好多了)。
結論:問題出在您的代碼上,修復此問題然後您可以嘗試測試它。如果你不能,那就不要測試。
+1你比我更好。 「如果難以測試,則編碼嚴重。「 – 2011-05-09 11:25:10
@Blowski:」如果它很難測試,它的編碼很糟糕。「我喜歡這個句子,聽到這句話總是令人失望(我曾多次遇到過這種情況),但總是這樣。 。好的編程很難;) – 2011-05-09 11:27:47
+1我也是給我一個新的句子給我簽名:D – superbly 2011-05-09 11:40:52
爲什麼不能用return
替換die()
?
我的解決方案是讓這個拋出異常,然後用另一種方法捕獲異常。然後你可以單元測試function a()
,檢查它是否引發了正確的異常。另一個函數處理die()
。
實際上死在這裏似乎不是一個好的解決方案。 但如果沒有辦法改變這個,你可以在另一個進程中運行該函數。
爲此,您必須編寫一個測試文件,其中運行函數A. 前。
<?php
include 'fileWithAFunction.php';
A();
?>
現在用shell_exec調用這個腳本。
$return = shell_exec('testscript.php');
return變量保存了testscript的輸出。
+1用於指出*當*由於無法控制的原因而無法*更改原始代碼時*如何操作。 – 2011-05-10 01:57:30
你也可以做一個'file_get_contents('http://example.com/testscript.php')'。 – dave1010 2011-05-11 10:12:14
這個問題不屬於StackOverflow嗎? – slubman 2011-05-09 10:24:07
@slubman,是的,我認爲它確實如此。我有一個投票來遷移它。如果您將其標記爲移動,它將有助於更快地完成。 – Caleb 2011-05-09 10:28:25
@doctore:請不要編輯以添加由於本網站的風格指南而被編輯出來的內容。閱讀http://tinyurl.com/so-hints關於如何提問的一些想法,但總而言之,在問題中提前加上感謝僅僅是對問題的分心;在這個社區中,你可以通過投票表示感謝,並通過幫助其他人回答問題。 – Caleb 2011-05-09 10:32:46