单元测试:使用Guzzle 5

时间:2015-09-24 22:42:36

标签: php unit-testing exception timeout guzzle

我正在使用 Guzzle 5.3 ,并希望测试我的客户端是否会抛出TimeOutException

然后,如何模拟Guzzle客户端抛出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测试一个捕获块?

1 个答案:

答案 0 :(得分:5)

您可以借助addException对象中的GuzzleHttp\Subscriber\Mock方法在/** * @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添加到模拟中。之后,我将模拟添加到发射器,最后,我调用我想测试的方法,x<-seq(-4,4,length=200) s = 1 mu = 0 y <- (1/(s * sqrt(2*pi))) * exp(-((x-mu)^2)/(2*s^2)) plot(x,y, type="l", lwd=2, col = "blue", xlim = c(-3.5,3.5))

参考:

Source Code

Mockito test a void method throws an exception