對於我正在開發的PHP應用程序,我需要讀取當前的git修訂版SHA,當然,我可以通過使用shell_exec或反引號來輕鬆地執行git命令行客戶端。我該如何測試執行命令行程序的PHP類方法?
我明顯地把這個調用放到了它自己的方法中,這樣我就可以輕鬆地隔離和嘲笑我的其餘單元測試。所以我的課看起來有點像這樣:
class Task_Bundle
{
public function execute()
{
// Do things
$revision = $this->git_sha();
// Do more things
}
protected function git_sha()
{
return `git rev-parse --short HEAD`;
}
}
當然,雖然我可以嘲笑git_sha測試大多數類的,我掙扎,看看如何測試實際git_sha()方法,因爲我不沒有看到爲它創建一個已知狀態的方法。我認爲單元測試中沒有任何實際價值可以稱爲git rev-parse
來比較結果嗎?我想知道至少斷言該命令已經運行,但我看不出有什麼辦法可以獲得由PHP執行的shell命令的歷史記錄 - 即使我指定PHP應該使用BASH而不是SH,歷史列表出現了空,我認爲,因爲單獨的反引號執行是單獨的終端會話。
我很樂意聽到關於如何測試這個問題的任何建議,或者可以保留未經測試的方法並在將來維護應用程序時小心一點。
我認爲,根據定義,這不再是一個*單元*測試...你可以測試它,但不是真正與它使用的任何東西分開。 – cHao 2012-04-14 23:13:30
我想我想要的仍然是一個單元測試,但通過驗證我的代碼以預期的方式調用git的公共API,進一步進行了嘲諷。例如,如果git是一個外部PHP庫中的類,我會得到它的一個模擬,並聲明rev-parse方法是用期望的參數調用的。 – acoulton 2012-04-14 23:36:10