首页 > 解决方案 > 模拟php函数

问题描述

我为我的项目制作了一个 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 或创建一个类与条件相同的模拟?

标签: phpunit-testingmockingphpunitsymfony4

解决方案


如果你真的想模拟这个功能,你可以使用这个包: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()

推荐阅读