PHPUnit Mock метод 'method' возвращает NULL - PullRequest
0 голосов
/ 02 апреля 2020

Мне известно, что из-за названия это очень похоже на часто задаваемый вопрос. Это не та проблема.

В моем наборе тестов Laravel я пытаюсь смоделировать объект Illuminate\Http\Request, чтобы заставить getClientIp вернуть указанное значение c:

$this->mockedRequest = $this->createMock(Request::class);
$this->mockedRequest->method('getClientIp')->willReturn('geralt.of.rivia');

Тем не менее, приведенная выше строка кода выдает мне следующую ошибку:

Call to a member function willReturn() on null

Другими словами, метод mock method() PHPUnit сам по себе, возвращая ноль, что делает невозможным цепочку ->willReturn() после него.

Я понятия не имею, что может быть причиной этой проблемы, и поиск ошибки в Google является исключительно трудным из-за количества людей, спрашивающих, почему их поддельный метод возвращает null (потому что они не т-цепь ->willReturn().

Есть идеи?

  • PHP 7.0
  • Laravel 5.3
  • PHPUnit 5.7

1 Ответ

0 голосов
/ 02 апреля 2020

Как обычно, я наконец-то нашел ответ сразу после публикации вопроса StackOverflow.

Как это происходит, объект Request в Laravel содержит метод с именем method(). Это известная проблема с PHPUnit. Если класс, над которым вы издеваетесь, реализует метод с именем method(), вы можете обойти это, цепочкой expects() first:

$this->mockedRequest-->expects($this->any())->method('getClientIp')->willReturn('geralt.of.rivia');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...