Symfony PhpUnit可以模拟PHP内置方法

时间:2018-11-03 20:39:17

标签: unit-testing mocking phpunit symfony4 prophecy

我正在使用 prophesize 方法来模拟Class

示例:

$user = $this->prophesize(User::class);

如何模拟PHP内置方法?

我确实需要模拟locale_accept_from_http($language);

您知道如何处理吗?

1 个答案:

答案 0 :(得分:2)

您没有嘲笑PHP的本机方法,而是为所需的所有内容编写了包装器。

class LocaleListener
{
    protected $language;

    public function __construct($language) {
        $this->language = $language;
    }

    public function getPreferredLocale() {
        return locale_accept_from_http($this->language);
    }
}

现在您可以使用以下方法进行模拟:

$listener = $this->prophesize(LocaleListener::class);
$listener->getPreferredLocale()->willReturn('en_GB');

如果您对Symfony建议从标头中处理用户区域设置的方式感兴趣,请在其演示应用程序中检出此EventListener: https://github.com/symfony/demo/blob/master/src/EventSubscriber/RedirectToPreferredLocaleSubscriber.php