我有一個函數,其他人寫道,它在函數內部創建一個cURL包裝對象。以下簡體版本功能結構與單元測試私有函數
public function getCodes()
{
//do some stufff
$communicator = new Communicator();
$result = $communicator->call($this->API_KEY);
//do some stuff with $result
}
我的任務是學習PHPUnit併爲此類代碼編寫測試。在這樣做時,我發現當在函數內部創建對象時,測試這樣的函數是非常困難的,並且測試不應該需要任何外部通信工作。
我們希望儘可能多的項目將我們的測試推到git上,但我們不希望意外或故意將我們的API憑據推送到git。
所以我的解決方案是保持getCodes()公開,但使它成爲接受Communicator對象作爲參數的私有函數的包裝。然後我可以使用模擬Communicator對象來測試私有方法。
但是這意味着getCodes永遠不會被測試(我的老闆想要100%的代碼覆蓋率),而且我也讀過你不應該在大多數情況下爲私有函數編寫測試。
所以我的問題基本上是,我該如何使用API調用爲這樣的函數編寫測試。
我沒有看到你的解決方案有什麼問題。代碼經過測試,不是嗎? :) – ZhongYu
是的,但我不想實施黑客,如果我不需要或者如果有更好的方法。 – Ethan22
它真的是一個黑客。您重構了您的代碼,並且新代碼在設計方面很有意義。 – ZhongYu