在CakePHP中模拟控制器方法

Alv*_*aro 0 testing unit-testing cakephp mocking cakephp-2.0

我很难测试我的一种方法,因为它使用了没有模型的供应商类。

好吧,问题是我希望该方法返回我想要的东西。有人告诉我,模拟方法是使它返回我想要的东西。

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

我该怎么做?在CakePHP食谱中,我可以找到以下内容:

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

所以我想我应该使用拳头选项:方法但是...如何使其返回我想要的?

谢谢。

jer*_*ris 5

请参阅我在以下问题中给您的答案:如何在CakePHP2.0上测试Add函数

$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));
Run Code Online (Sandbox Code Playgroud)

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