簡體   English   中英

如何強制 PHP 方法中的 curl 請求無法進行單元測試

[英]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 代碼。

這些變量是:

  • http_proxy
  • https_proxy
  • no_proxy

因此,您可以在setUp()保留這些變量的當前值,並在tearDown()恢復它們。

以下代碼肯定會打破你的卷曲:

putenv("https_proxy=localhost:5678");
putenv("no_proxy=blah-blah-blah");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM