PHPUnit: как издеваться над приватными методами?
У меня есть такой класс:
class A {
private function testing($x)
{
// do something
$this->privateMethod();
}
private function privateMethod($number) {
// do something
}
}
Для вызова тестирования () я использую это:
$reflection = new \ReflectionClass('A');
$method = $reflection->getMethod('testing');
$method->setAccessible(TRUE);
$object = new A();
$parameters = array();
$result = $method->invokeArgs($object, $parameters);
Но я не знаю, как издеваться над privateMethod(). Я хочу тестировать только код в методе testing (). Я хочу указать на то, что privateMethod () должен возвращать результат без вызова метода.
1 ответ
Если вы можете изменить частный на защищенный, вы сможете использовать частичные макеты для этого.
$object = $this->getMockBuilder('A')
->setMethods(array('privateMethod'))
->getMock();
$object->expects($this->any())
->method('privateMethod')
->will($this->returnValue($x));
Это заменит реализацию только на методах в setMethods
массив, и все другие методы будут выполнять исходный код. Это, однако, не работает для частных методов, поскольку фиктивные объекты расширяют исходный; но это не может переопределить private
,