模拟PHP功能

时间:2018-07-19 07:41:35

标签: php unit-testing mocking phpunit symfony4

我为我的项目制作了一个symfony 4可重用的包。 我想以100%附近的覆盖率对其进行测试。 但是我不知道如何测试依赖于php函数的部分代码。

示例:

public function getStatusCode(\Exception $exception)
{
    if ($exception instanceof HttpExceptionInterface) {
        return $exception->getStatusCode();
    }
    if (is_a($exception, "Symfony\Component\Security\Core\Exception\AccessDeniedException")) {
        return Response::HTTP_UNAUTHORIZED; // I want to test this
    }
    return Response::HTTP_INTERNAL_SERVER_ERROR;
}

我尝试使用getMockBuilder,但是模拟的类不正确。

是否可以模拟或替换is_a或创建其类与条件相同的模拟?

1 个答案:

答案 0 :(得分:0)

如果你真的想模拟这个函数,你可以使用这个包:https://packagist.org/packages/hjerichen/prophecy-php

这是 PHPUnit TestCase 中测试方法的简单示例。

$php = $this->prophesizePHP(__NAMESPACE__);
$php->is_a($exception, "Symfony\Component\Security\Core\Exception\AccessDeniedException")->willReturn(true);
$php->reveal()