Unit testing 在CakePHP上模拟控制器方法

Unit testing 在CakePHP上模拟控制器方法,unit-testing,cakephp,testing,mocking,cakephp-2.0,Unit Testing,Cakephp,Testing,Mocking,Cakephp 2.0,我很难测试我的一个方法,因为它使用了一个没有模型的供应商类 问题是,我希望这个方法返回我想要的东西。 有人告诉我,模仿一个方法就是让它返回我想要的东西 例如,当我调用“foo()”方法时,我希望它总是返回true 我怎么做?在CakePHP食谱中,我可以找到以下内容: $Posts = $this->generate('Posts', array( 'methods' => array( 'isAuthorized' ), 'models' =

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

问题是,我希望这个方法返回我想要的东西。 有人告诉我,模仿一个方法就是让它返回我想要的东西

例如,当我调用“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'
    )
));
所以我想我应该使用第一个选项:方法 但是如何让它返回我想要的


谢谢。

参考我在这个问题上给你的答案:


有关模拟的更多信息:

请参阅我在这个问题中给你的答案:


有关嘲弄的更多信息:

我根本不清楚你想达到什么目的、出了什么问题以及你已经尝试了什么。。。请澄清您的问题,以便我们能够帮助您。我已更新了问题。有人告诉我,嘲笑一个方法可以让它返回你想要的。当我从测试中调用控制器时,我希望控制器中的方法返回TRUE。“可能是在嘲笑它吗?”杰里米·哈里斯,另一个问题有点不同,我不太理解你在这个场合的回答。在这种情况下,我发现它更加清晰和有用。谢谢@史蒂夫:没问题,如果你不理解,人们通常会试图澄清,你可以发表评论:)我根本不清楚你想实现什么,出了什么问题,你已经尝试了什么。。。请澄清您的问题,以便我们能够帮助您。我已更新了问题。有人告诉我,嘲笑一个方法可以让它返回你想要的。当我从测试中调用控制器时,我希望控制器中的方法返回TRUE。“可能是在嘲笑它吗?”杰里米·哈里斯,另一个问题有点不同,我不太理解你在这个场合的回答。在这种情况下,我发现它更加清晰和有用。谢谢@史蒂夫:没问题,如果你不明白,人们通常会试图澄清,请发表评论:)谢谢@jeremyharris!!这正是我要找的!!返回所需内容的方法(不是组件或模型)。谢谢@jeremyharris!!这正是我要找的!!返回所需内容的方法(不是组件或模型)。
$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));