PHP 模拟测试在 PHPUnit 内的方法调用部分不起作用

问题描述

我在 PHPStorm 上运行 PHP 8,我正在尝试为返回 IP 字符串的函数创建测试。我正在使用 PHPUnit 和 PHPMock

我的测试中有以下代码

$UserIpAddress = $this->getFunctionMock(__NAMESPACE__,'ip_request');
        $UserIpAddress->expects($this->once())
            ->method('getRealIpAddr')
            ->willReturn('127.0.0.1');

我的错误

Method name is already configured

然而,当我删除它时,我收到一个错误提示它应该被调用

我已经复制并粘贴了函数名,它肯定在正确的类中。

我的命名空间是正确的,使用该函数的实际页面工作正常。

有什么想法吗?

谢谢

解决方法

固定!经过大量检查各种选项后,应该在测试文件中的代码是

$local = new ip_request();
        $this->assertEquals('127.0.0.1',$local->getRealIpAddr());

在实际的类文件中

$ip = $_SERVER['REMOTE_ADDR'] ?? '127.0.0.1';

我认为 ?? '127.0.0.1' 不应该留在生产环境中。