加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP单元测试和Mockery模拟

发布时间:2020-12-13 17:24:24 所属栏目:PHP教程 来源:网络整理
导读:这可能是我方面对嘲弄的误解.我真的很感激为什么嘲笑一个不存在的或现存的类是好事? 示例场景:假设我们有一个类依赖于第二个类的输出,我们更改输出格式或其他.虽然它们在头等舱中已经过时了,但这不会让我们的测试成功吗? 解决方法 答案是肯定的!如果您尊
这可能是我方面对嘲弄的误解.我真的很感激为什么嘲笑一个不存在的或现存的类是好事?

示例场景:假设我们有一个类依赖于第二个类的输出,我们更改输出格式或其他.虽然它们在头等舱中已经过时了,但这不会让我们的测试成功吗?

解决方法

答案是肯定的!如果您尊重代码中的某些可测试性原则,则可以将一个方法与同一类中的其他方法隔离开来.这是单元测试的目标.

看这个例子:

<?php

class User {

    public function years()
    {
        return floor($this->months() / 12);
    }

    public function months()
    {
        // Database call or anything else,it's a black box !
    }

}

class UserTest extends TestCase {

    public function testYearsReturnTheNumberOfYears() 
    {
        $user = Mockery::mock('User[months]');
        $user->shouldReceive('months')->andReturn(18);

        assertEquals(1,$user->years());
    }

}

即使方法数月被打破,测试也会通过.阅读mockery documentation以获得更多解释.

模拟是单元测试的关键.如果没有此工具,当您的代码中出现问题时,所有测试都会失败,您无法找到错误的来源. PHP不够灵活,无法模拟Ruby或Javascript中的所有内容,但是如果设计模式良好,您可以做得很好.

一个非常好的例子是Laravel,所有的核心类都可以被嘲笑.像这样,您可以模拟数据库调用或电子邮件发送中的错误.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读