Вам нужно использовать метод setMethodsExcept()
, чтобы избежать повторного объявления метода excepts
.
Создание макета таким образом должно работать:
$this->request = $this->getMockBuilder(Request::class)
->setMethodsExcept(['expects'])
->disableOriginalConstructor()
->getMock();
Редактировать : немного пояснений:
Чтобы проверить ваш случай, я сделал следующее:
class Expecting
{
public function get()
{
return 'my json';
}
public function expects()
{
return 'who knows what';
}
}
class ClassA
{
public function testMe($the_expect_dependency)
{
$the_expect_dependency->get();
}
}
И в моем модульном тесте у меня было почти то же самое объявление, что и у вас:
class ClassATest extends \PHPUnit\Framework\TestCase
{
public function testThatItCanBeMocked()
{
$mock = $this->getMockBuilder(Expecting::class)
->setMethodsExcept(['expects'])
->disableOriginalConstructor()
->getMock();
$mock->expects($this->once())->method('get')
->willReturn('my json');
$my_obj = new ClassA();
$my_obj->testMe($mock);
}
}
При удалении вызова setMethodsExcept()
это дает именно ту ошибку, которую вы упомянули, а неуверен, что могло пойти не так?
Кстати, я использую phpunit версии 7.5.