在CakePHP上模拟控制器方法

时间:2012-04-17 19:47:34

标签: unit-testing cakephp testing mocking cakephp-2.0

我在测试我的一个方法时遇到了麻烦,因为它使用的是没有模型的供应商类。

嗯,问题是我想要那种方法来回报我想要的东西。 有人告诉我,嘲笑一种方法就是让它返回我想要的东西。

例如,当我调用“foo()”方法时,我希望它始终为我返回。

我该怎么办?在CakePHP食谱我可以找到:

$Posts = $this->generate('Posts', array(
    'methods' => array(
        'isAuthorized'
    ),
    'models' => array(
        'Post' => array('save')
    ),
    'components' => array(
        'RequestHandler' => array('isPut'),
        'Email' => array('send'),
        'Session'
    )
));

所以我想我应该使用第一个选项:方法 但是......如何让它回归我想要的东西?

感谢。

1 个答案:

答案 0 :(得分:4)

请参阅我在此问题中给出的答案:How can i test an Add function on CakePHP2.0

$Posts = $this->generate('Posts', array(
    'methods' => array(
        'isAuthorized'
    ),
    'models' => array(
        'Post' => array('save')
    ),
    'components' => array(
        'RequestHandler' => array('isPut'),
        'Email' => array('send'),
        'Session'
    )
));

// tell PHPUnit that `isAuthorized` should return true any time it's called
$Posts
  ->expects($this->any())
  ->method('isAuthorized')
  ->will($this->returnValue(true));
// tell PHPUnit to expect `isPut` once, and to return false
$Posts
  ->RequestHandler
  ->expects($this->once())
  ->method('isPut')
  ->will($this->returnValue(false));

有关模拟的更多信息:http://www.phpunit.de/manual/3.0/en/mock-objects.html