我知道这个标题看起来很像一个常见问题。这不是同一个问题。
在我的Laravel测试套件中,我试图模拟IlluminateHttpRequest
对象,使getClientIp
返回一个特定的值:
$this->mockedRequest = $this->createMock(Request::class);
$this->mockedRequest->method('getClientIp')->willReturn('geralt.of.rivia');
然而,上面的代码行给了我以下错误:
Call to a member function willReturn() on null
换句话说,PHPUnit mockmethod()
方法本身就是返回null的方法,因此显然不可能将->willReturn()
链接到它之后
我不知道是什么导致了这个问题,在谷歌上搜索这个错误非常困难,因为有很多人问他们的模拟方法为什么返回null
(因为他们没有链接->willReturn()
。
有什么见解吗?
- PHP 7.0
- Laravel 5.3
- PHPUnit 5.7
和往常一样,我终于在发布StackOverflow问题后立即找到了答案。
碰巧,Laravel中的Request
对象包含一个名为method()
的方法。这是PHPUnit的一个已知问题。如果您正在模拟的类实现了一个名为method()
的方法,那么您可以通过首先链接一个expects()
来绕过这个问题:
$this->mockedRequest-->expects($this->any())->method('getClientIp')->willReturn('geralt.of.rivia');