PHPUnit макет родительский метод

у меня проблема с издевательским родительским методом, это пример:

class PathProvider
{
    public function getPath()
    {
        return isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : '/';
    }
}


class Uri extends PathProvider
{
    public function getParam($param)
    {
        $path = $this->getPath();

        if ($path == $param)
            return 'OK';
        else
            return 'Bad';
    }
}

и теперь я хочу макет метода getPath () и вызвать метод getParam (), который получает издевательское значение.

$mock = $this->getMock('PathProvider');

$mock->expects($this->any())
->method('getPath')
->will($this->returnValue('/panel2.0/user/index/id/5'));

я писал эту часть, но я не знаю, как я должен передать это издевательское значение методу тестирования.

2 ответов


вам просто нужно mock Uri класса. Вы можете издеваться только над одним методом (getPath), вот так:

$sut = $this->getMock('Appropriate\Namespace\Uri', array('getPath'));

$sut->expects($this->any())
    ->method('getPath')
    ->will($this->returnValue('/panel2.0/user/index/id/5'));

и затем вы можете проверить свой объект как обычно:

$this->assertEquals($expectedParam, $sut->getParam('someParam'));

Я и мои друзья пишут mockito, как насмешливый библиотека. УЗО-goddies#глумливые

$mock = Mock::create('\Appropriate\Namespace\Uri');
Mock::when($mock)->getPath()->thenReturn(result);