[英]How to force a curl request in a PHP method to fail for a unit test
我正在用單元測試覆蓋一些遺留代碼。 我有一些看起來像這樣的代碼† (我已經刪除了與這個問題無關的位):
public function search($query) {
$query = urlencode($query);
$url = 'https://example.com/search.php?q=' . $query;
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_URL => $url,
));
$data = curl_exec($curl);
if (!$data) {
throw new Exception('An error occurred while trying to process the request.');
}
}
如何強制curl
請求失敗,以便throw
Exception
? 在完全覆蓋之前,我不允許更改方法中的現有代碼。 除了查詢字符串外,URL 是硬編碼的,因此我無法更改它,並且查詢字符串是使用urlencode()
正確編碼的 URL,因此我無法傳遞格式錯誤的字符串。
是否有我可以超出查詢的安全字符串長度? 也許我可以用ini_set()
更改設置?
† 我知道代碼中的錯誤
cURL 有利於建立通信的幾個環境變量,它們可用於影響 curl 操作,而無需調整已測試的 php 代碼。
這些變量是:
因此,您可以在setUp()
保留這些變量的當前值,並在tearDown()
恢復它們。
以下代碼肯定會打破你的卷曲:
putenv("https_proxy=localhost:5678");
putenv("no_proxy=blah-blah-blah");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.