PHPUnit Mock 'method' 方法返回 NULL

我知道标题使这看起来与常见问题非常相似。这不是同一个问题。

在我的 Laravel 测试套件中,我试图模拟Illuminate\Http\Request对象以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

  • 拉维尔 5.3

  • PHPUnit 5.7


FFIVE
浏览 70回答 1
1回答

Helenr

像往常一样,我终于在发布 StackOverflow 问题后立即找到了答案。碰巧的是Request,Laravel 中的对象包含一个名为method(). 这是 PHPUnit 的一个已知问题。如果您正在模拟的类实现了一个名为 的方法method(),您可以通过expects()首先链接来解决这个问题:$this->mockedRequest-->expects($this->any())->method('getClientIp')->willReturn('geralt.of.rivia');
打开App,查看更多内容
随时随地看视频慕课网APP