7

我在模拟父方法时遇到问题,这是示例:

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'));

我正在写这部分,但我不知道如何将这个模拟值传递给测试方法。

4

2 回答 2

6

你只需要模拟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'));
于 2013-02-12T07:25:49.457 回答
4

我和我的朋友们写 mockito 就像嘲笑图书馆一样。ouzo-goddies#嘲笑

$mock = Mock::create('\Appropriate\Namespace\Uri');
Mock::when($mock)->getPath()->thenReturn(result);
于 2015-01-07T17:41:44.957 回答