php - 单元测试 : Simulate a timeout with Guzzle 5

标签 php unit-testing exception timeout guzzle

我正在使用 Guzzle 5.3 并想测试我的客户端是否抛出 TimeOutException

那么,我如何模拟 Guzzle Client 并抛出 GuzzleHttp\Exception\ConnectException

要测试的代码。

public function request($namedRoute, $data = [])
{
    try {
        /** @noinspection PhpVoidFunctionResultUsedInspection */
        /** @var \GuzzleHttp\Message\ResponseInterface $response */
        $response =  $this->httpClient->post($path, ['body' => $requestData]);
    } catch (ConnectException $e) {
        throw new \Vendor\Client\TimeOutException();
    }
}

更新:

正确的问题是:如何使用 Guzzle 5 抛出异常?或者,如何使用 Guzzle 5 测试 catch block ?

最佳答案

借助 GuzzleHttp\Subscriber\Mock 对象中的 addException 方法,您可以在 catch block 中测试代码。

这是完整的测试:

/**
 * @expectedException \Vendor\Client\Exceptions\TimeOutException
 */
public function testTimeOut()
{
    $mock = new \GuzzleHttp\Subscriber\Mock();
    $mock->addException(
        new \GuzzleHttp\Exception\ConnectException(
            'Time Out',
            new \GuzzleHttp\Message\Request('post', '/')
        )
    );

    $this->httpClient
        ->getEmitter()
        ->attach($mock);

    $this->client = new Client($this->config, $this->routing, $this->httpClient);

    $this->client->request('any_route');
}

在单元测试中,我将 GuzzleHttp\Exception\ConnectException 添加到模拟中。之后,我将模拟添加到发射器,最后,我调用了我想要测试的方法,request

引用:

Source Code

Mockito test a void method throws an exception

关于php - 单元测试 : Simulate a timeout with Guzzle 5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32772120/

相关文章:

python - 如何向生成器重新抛出异常

php - mysql转换问题。警告:mysqli_fetch_all()期望参数1为mysqli_result,在中给出 bool 值

php - 如何处理使用相同数据库的两个独立 Laravel 项目的迁移?

php - 我需要通过使用引用帖子中的表用户的外键来了解帖子的所有者

unit-testing - 覆盖 Grails GORM 域类上的事件关闭以进行单元测试

javascript - 使用可折叠的堆栈跟踪将 JavaScript 错误正确记录到控制台

java - DAO 模式中的异常与返回码

php - 无法从 2 个表创建所需的数组

angularjs - 测试具有许多依赖项的 Angular Controller

javascript - 文档元素的模拟对象