【问题标题】:Mock php functions模拟php函数
【发布时间】:2018-07-19 07:41:35
【问题描述】:

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

【问题讨论】:

  • 为什么不能使用instanceof 而不是is_a
  • 为什么需要模拟?你想模拟哪个方法调用?传递AccessDeniedException 似乎是测试此方法是否正确返回状态代码的最简单方法。
  • 我想使用 is_a 因为我希望该方法在没有安全包的情况下工作也许解决方案只是在项目开发需要中添加安全包

标签: php unit-testing mocking phpunit symfony4


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-29
    • 1970-01-01
    • 2013-11-04
    • 1970-01-01
    • 2019-11-01
    • 2010-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多