【问题标题】:phpspec - mocking return value of methodphpspec - 模拟方法的返回值
【发布时间】:2013-10-15 20:34:18
【问题描述】:

在 phpspec 中我可以模拟方法的返回值吗?

例如:

class MyClass()
{
    public function getStaffMemberNames()
    {
        // db call to get array of staff member names
    }

    public function sortStaffMemberNames()
    {
        return sort($this->getStaffMemberNames());
    }
}

我有兴趣测试 sortStaffMemberNames 方法。但它依赖于另一个使用数据库连接的类方法。我想模拟 getStaffMemberNames 以便我可以轻松测试。

如何做到这一点?

【问题讨论】:

    标签: php phpunit phpspec


    【解决方案1】:

    phpspec 中没有部分模拟(你不能模拟被测类)。这是一种不好的做法。

    您应该改为模拟您的协作者(例如数据库连接)。

    【讨论】:

    • 不好的做法?所以最好在每个使用方法 getStaffMemberNames() 的方法中模拟数据库调用?
    • phpspec 试图强制执行一些实践,其中包括单一职责原则。在您的情况下,“sortStaffMemberNames()”有自己的责任(排序),应该被提取到一个新对象中并接收“getStaffMemberNames”的结果作为参数。
    • 没错。每当 phpspec 出现问题时,都表明您遇到了设计问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-09
    • 2022-11-07
    • 1970-01-01
    • 2016-03-21
    • 2017-09-12
    相关资源
    最近更新 更多