PHP8下PHPUnit使用PHPMock时报方法已配置错误如何解决?
问题解决办法
错误原因
你混淆了PHPMock中getFunctionMock()的使用场景:该方法是专门用来Mock全局函数的API,调用时已经通过第二个参数绑定了要Mock的函数名,不需要也不能再调用method()方法指定调用目标,否则就会触发Method name is already configured的冲突报错。
分场景修复方案
- 场景1:你要Mock的是全局函数
ip_request()
直接删除method('getRealIpAddr')行即可,正确写法如下:$UserIpAddress = $this->getFunctionMock(__NAMESPACE__, 'ip_request'); $UserIpAddress->expects($this->once()) ->willReturn('127.0.0.1'); - 场景2:你要Mock的是
ip_request类的getRealIpAddr类方法
你用错了Mock方法,应该使用PHPUnit原生的类MockAPI,不要用PHPMock的函数Mock接口,正确写法如下:$UserIpAddress = $this->createMock(\你的业务命名空间\ip_request::class); $UserIpAddress->expects($this->once()) ->method('getRealIpAddr') ->willReturn('127.0.0.1');
额外校验点
如果Mock全局函数不生效,确认getFunctionMock的第一个参数填写的是业务代码调用ip_request函数所在的命名空间,而非测试类自身的命名空间。
内容的提问来源于stack exchange,提问作者Spinstaz
相关产品推荐
相关产品推荐

