返回另一个模拟类的模拟模拟类

Posted

技术标签:

【中文标题】返回另一个模拟类的模拟模拟类【英文标题】:Mockery mock class that returns another mocked class 【发布时间】:2019-08-18 05:00:38 【问题描述】:

我有课

<?php

class Cards

    public function __construct($id) 
        $this->id = $id;
    

    public function add($card) 
        // Make API call
        return true;
    

还有另一个返回 Cards 类的类

<?php

class Payment

    public function cards() 
        return new Cards('1');
    

而且我似乎无法弄清楚如何模拟付款,所以它返回一个模拟卡。基本上我想

模拟付款,因此它返回一个模拟的卡片,允许类似的功能

function() 
    $vault = new Payment;
    $cards = $vault->cards();

    if ($cards->add()) 
        // do stuff
    

无需对支付处理器进行 API 调用即可进行模拟和测试。

【问题讨论】:

【参考方案1】:

问题是您尝试使用 new 关键字实例化 Card 类。这使得(几乎)不可能模拟它。您可以使用几种不同的技术来替换 new 关键字,最简单的方法是将实例传递给 Payment 构造函数或直接传递给方法。

【讨论】:

以上是关于返回另一个模拟类的模拟模拟类的主要内容,如果未能解决你的问题,请参考以下文章

Jest - 在另一个模块函数中模拟函数

使用 python 的模拟 patch.object 更改在另一个方法中调用的方法的返回值

Jest - 模拟函数,从另一个文件导入

未实现 Keycloak 模拟 API

如何调用模拟另一个用户而不是 SYSTEM 的函数

Python模拟补丁在另一个函数内的一个函数