Как заставить фиктивный PHPUnit потерпеть неудачу при вызове ненастроенных методов? - PullRequest
3 голосов
/ 09 января 2020

Возможен ли сбой PHPUnit при вызове любого ненастроенного метода для фиктивного объекта?

Пример;

$foo = $this->createMock(Foo::class);
$foo->expects($this->any())->method('hello')->with('world');

$foo->hello('world');
$foo->bye();

Этот тест пройдёт успешно. Я хотел бы, чтобы он не работал с

Foo::bye() was not expected to be called. 

PS Следующее будет работать, но это означает, что мне придется перечислить все настроенные методы в обратном вызове. Это не подходящее решение.

$foo->expects($this->never())
    ->method($this->callback(fn($method) => $method !== 'hello'));

1 Ответ

3 голосов
/ 09 января 2020

Это делается путем отключения автоматической генерации возвращаемого значения.

$foo = $this->getMockBuilder(Foo::class)
    ->disableAutoReturnValueGeneration()
    ->getMock();

$foo->expects($this->any())->method('hello')->with('world');

$foo->hello('world');
$foo->bye();

Это приведет к

Return value inference disabled and no expectation set up for Foo::bye()

Обратите внимание, что это не требуется для других методов (например, hello) для определения метода возврата.

...