【问题标题】:Cake 3: Mock Behavior for Model蛋糕 3:模型的模拟行为
【发布时间】:2015-05-04 19:15:57
【问题描述】:

在 Cake 3 中,我正在测试一种行为。现在我想测试通过模型保存时是否很好地使用了该行为。为此,我需要模拟一些行为方法。

我已经搜索了很多方法来模拟它们并将它们添加到模型中。在 Cake 2.x 中,我们能够通过 ClassRegistry 注册自定义行为。我已经在 Cake 3 中搜索了如何做到这一点,但找不到。

任何机构都知道如何做到这一点?

谢谢

【问题讨论】:

    标签: cakephp phpunit cakephp-3.0


    【解决方案1】:

    您可以使用ObjectRegistry::set() 简单地将模拟手动添加到表行为注册表中,这允许添加任意对象。

    $table = TableRegistry::get('FooBars');
    $behaviorOptions = [];
    
    $behaviorMock = $this->getMock(
        '\App\Model\Behavior\BazBehavior',
        ['some', 'mocked', 'methods'],
        [$table, $behaviorOptions]
    );
    
    $table->behaviors()->set('Baz', $behaviorMock);
    

    现在您的模拟行为在表格上注册为Baz

    【讨论】:

    • $table->behaviors()->set( 是我一直在寻找的地方 :) 谢谢!
    • 我使用了以下代码:$table->behaviors()->set('Baz', $behaviorMock);。收到此错误:Fatal error: Call to a member function set() on null
    • @Bob 好吧,我能从这里做的不多,检查为什么它是null,默认情况下表类constructor creates an instance of \Cake\ORM\BehaviorRegistry,除非behaviors 选项传递给它。
    • 这很棘手:当您将放置模拟方法的数组留空 ('some', 'mocked', 'methods') 时,它会自动模拟所有方法;) 棘手且不干净?
    • @Bob 如果你不想模拟任何方法,那么你必须传递null,而不是一个空数组
    猜你喜欢
    • 2012-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-23
    • 1970-01-01
    • 2015-11-25
    • 1970-01-01
    相关资源
    最近更新 更多