ivanov77
Новичок
Приветствую.
Не подскажете почему в документации сказано прямо:
Вот, все три теста проходят:
Не подскажете почему в документации сказано прямо:
Но при этом защищенные методы получается "стабировать":Please note that final, private, protected, and static methods cannot be stubbed or mocked. They are ignored by PHPUnit’s test double functionality and retain their original behavior
Код:
class First
{
public function one()
{
return 'one';
}
public function two()
{
return 'two';
}
public function check()
{
return $this->checkProtected();
}
protected function checkProtected()
{
return 'checkProtected';
}
}
Код:
public function testEight()
{
// стабируем только метод two
$stub = $this->getMockBuilder(First::class)
->setMethods(['two'])
->getMock();
$this->assertEquals('one', $stub->one());
$this->assertEquals(null, $stub->two());
$this->assertEquals('checkProtected', $stub->check());
}
public function testNine()
{
// стабируем только метод checkProtected, возвращаемое значение по умолчанию
$stub = $this->getMockBuilder(First::class)
->setMethods(['checkProtected'])
->getMock();
$this->assertEquals('one', $stub->one());
$this->assertEquals(null, $stub->check());
}
public function testTen()
{
// стабируем только метод checkProtected, возвращаемое значение настраиваем
$stub = $this->getMockBuilder(First::class)
->setMethods(['checkProtected'])
->getMock();
$stub->method('checkProtected')
->will($this->returnValue('testTen'));
$this->assertEquals('one', $stub->one());
$this->assertEquals('testTen', $stub->check());
}