PHPUnit 模拟 'method' 方法返回 NULL



我知道这个标题看起来很像一个常见问题。这不是同一个问题。

在我的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');

最新更新