Symfony PhpUnit 模拟 PHP 内置方法

Symfony PhpUnit to mock PHP built-in method

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

示例:

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

如何模拟PHP内置方法?

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

你知道如何处理这个吗?

您不模拟 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 建议处理来自 header 的用户语言环境的方式感兴趣,请查看他们的演示应用程序中的 EventListener: https://github.com/symfony/demo/blob/master/src/EventSubscriber/RedirectToPreferredLocaleSubscriber.php