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,

Другие вопросы по тегам