Возможно ли создать макет объекта с отключенным конструктором и вручную настроенными защищенными свойствами?phpunit - mockbuilder - установить внутреннее свойство mock object
Вот идиотский пример:
class A {
protected $p;
public function __construct(){
$this->p = 1;
}
public function blah(){
if ($this->p == 2)
throw Exception();
}
}
class ATest extend bla_TestCase {
/**
@expectedException Exception
*/
public function testBlahShouldThrowExceptionBy2PValue(){
$mockA = $this->getMockBuilder('A')
->disableOriginalConstructor()
->getMock();
$mockA->p=2; //this won't work because p is protected, how to inject the p value?
$mockA->blah();
}
}
Так что я хочу придать значение р, который защищен, так что я не могу. Должен ли я определить setter или IoC, или я могу сделать это с помощью phpunit?
Только для записи - если вы тестируете непубличный API, то вы делаете это неправильно. Модульное тестирование - это поведение тестирования, а не внутренняя реализация. –