Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 使用映射方法的CakePHP测试行为_Unit Testing_Cakephp_Cakephp 2.1 - Fatal编程技术网

Unit testing 使用映射方法的CakePHP测试行为

Unit testing 使用映射方法的CakePHP测试行为,unit-testing,cakephp,cakephp-2.1,Unit Testing,Cakephp,Cakephp 2.1,在创建ownablebhavior时,我决定使用可用的$mapMethods属性。它可以将任何名为isOwnedByXXX()的方法映射到isOwnedBy()(此文档的链接为) 这是我的OwnableBehaviorcode: class OwnableBehavior extends Model Behavior { public $mapMethods = array('/isOwnedBy(\w+)/' => 'isOwnedBy'); public funct

在创建
ownablebhavior
时,我决定使用可用的
$mapMethods
属性。它可以将任何名为
isOwnedByXXX()
的方法映射到
isOwnedBy()
(此文档的链接为)

这是我的
OwnableBehavior
code:

class OwnableBehavior extends Model Behavior {

    public $mapMethods = array('/isOwnedBy(\w+)/' => 'isOwnedBy');

    public function isOwnedBy(Model $model, $type, $id, Model $userModel, $userId) {
         // Method is currently empty
    }
}
以下是测试用例代码:

class OwnableBehaviorTest extends CakeTestCase {

    public function testIsOwned() {
        $TestModel = new Avatar();
        $TestModel->Behaviors->attach('Ownable');
        $result = $TestModel->Behaviors->Ownable->isOwnedByUser(
            $TestModel, 1, new User(), 1);
        $this->assertTrue($result);
    }
}
当我运行测试时,出现以下错误:

 Call to undefined method OwnableBehavior::isOwnedByUser()
如果我将方法调用更改为isOwnedBy($TestModel,'user',1,new user(),1)这是可行的,因此出于某种原因,映射的方法在单元测试期间似乎不起作用。我已经在一个控制器中测试了映射方法,没有发现错误

我想知道这是否取决于我是如何将行为加载到模型中的。我在食谱中找不到任何关于如何正确测试行为的文档,比如组件、助手等。。。所以我使用了与核心行为测试相同的技术(见
Cake/Test/Case/Model/Behavior/

我确实认为这可能是因为我覆盖了
ModelBehavior::setup()
方法,但我尝试在setup方法的开头添加
parent::setup($model,$settings)
,但仍然得到相同的错误。我没有覆盖任何其他
ModelBehavior
方法


我想我可以使用
ownablebhavior::isOwnedBy()
方法,但我很想知道是否可以在单元测试期间让映射的方法工作。

我找到的解决方案是替换这一行:

$result = $TestModel->Behaviors->Ownable->isOwnedByUser(...);
与:

因此,这只是一个更像在应用程序中使用它的例子,直接从模型中调用行为方法。我不知道这是否破坏了单元测试的概念,并使其更多地用于集成测试。

是由行为集合类实现的,这就是为什么它不能直接在行为上调用->undefinedmethod。
$result = $TestModel->isOwnedByUser(...);