Czy jest możliwe utworzenie obiektu próbnego z wyłączonym konstruktorem i ręcznie ustawionymi właściwościami chronionymi?phpunit - mockbuilder - ustaw właściwość wewnętrzną obiektu próbnego
Oto idiotyczny przykład:
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();
}
}
Więc chcę wstrzyknąć wartość P, która jest chroniona, więc nie mogę. Czy powinienem zdefiniować setter lub IoC, czy mogę to zrobić z phpunit?
Tylko dla rekordu - jeśli testujesz niepubliczny interfejs API, robisz to źle. Testowanie jednostkowe dotyczy zachowania testowego, a nie implementacji wewnętrznej. –