Phpunit 模仿一个狂饮的HTTP响应

Phpunit 模仿一个狂饮的HTTP响应,phpunit,guzzle,Phpunit,Guzzle,我该如何恰当地模仿狂饮的反应呢。在测试我正在编写的解析器时,测试html包含在文件中。在PHPUnit测试中,我正在执行文件读取内容,并将结果传递给我的方法。有时HTML会链接到一个单独的文件。我可以这样嘲笑这种反应: public function testAlgo() { $mock = new MockAdapter(function() { $mockhtml = file_get_contents($this->dir . '/HTML/authorshi

我该如何恰当地模仿狂饮的反应呢。在测试我正在编写的解析器时,测试html包含在文件中。在PHPUnit测试中,我正在执行
文件读取内容
,并将结果传递给我的方法。有时HTML会链接到一个单独的文件。我可以这样嘲笑这种反应:

public function testAlgo()
{
    $mock = new MockAdapter(function() {
        $mockhtml = file_get_contents($this->dir . '/HTML/authorship-test-cases/h-card_with_u-url_that_is_also_rel-me.html');
        $stream = Stream\create($mockhtml);

        return new Response(200, array(), $stream);
    });
    $html = file_get_contents($this->dir . '/HTML/authorship-test-cases/h-entry_with_rel-author_pointing_to_h-card_with_u-url_that_is_also_rel-me.html');
    $parser = new Parser();
    $parser->parse($html, $adaptor = $mock);
然后在我的实际方法中,当我发出guzzle请求时,此代码起作用:

try {
    if($adapter) {
        $guzzle = new \GuzzleHttp\Client(['adapter' => $adapter]);
    } else {
        $guzzle = new \GuzzleHttp\Client();
    }
    $response = $guzzle->get($authorPage);
显然,这并不理想。有人知道更好的方法吗? $html=(字符串)$response->getBody()


编辑:我现在使用
\uuu构造()
methid来设置默认的Guzzle客户端。然后,使用可由测试调用的第二个函数将客户端替换为具有模拟适配器的新客户端。我不确定这是否是最好的方法。

您可以使用MockPlugin API,如下所示:

$plugin = new MockPlugin();
$plugin->addResponse(__DIR__.'/twitter_200_response.txt');
然后,txt文件包含响应中的所有内容,包括标题

这里也有很好的方法:

这里还有一些文章: