当前位置: 首页 > 开发知识 >

phpunit 中的mock

作者:游戏app开发公司 阅读: 发布时间:2024-08-21 11:00

摘要:当我们进行单元测试的时候,我们可能希望不要实际操作数据库,而是模拟数据库的交互,这样可以保护我们的数据库环境。...

什么是mock?

mock就是使用一段伪造的代码来模拟实际的功能处理,模拟出来的数据和我们实际请求处理的数据是类似的或者匹配的。

_phpunit 中的mock_phpunit 中的mock

什么时候使用mock?

当我们进行单元测试的时候,我们可能希望不要实际操作数据库,而是模拟数据库的交互,这样可以保护我们的数据库环境。

一些网络请求的api,可能会因为网络或者其它原因导致请求异常,我们就需要使用本地模拟数据进行测试。

phpunit中如何使用mock

对于数据库的mock,我们经常使用的就是伪造对象。

在php中,我们操作数据库很多情况下都是通过ORM来操作的,也就是通过关系对象模型来处理数据库内容。

我们可以伪造数据库对象,并对数据进行伪造赋值,这样,我们在调用ORM的相关操作的时候,就可以直接从伪造的数据中获取。

具体代码如下:

class Person
{
    public $db = null;function __construct($db) 
    {
        $this->db = $db;
    }public function greeting($id)
    {
        $friend = $this->db->getPersonByID($id);
        $friendName = $friend->name;
        return "$friendName";
    }
}
$db = new Database();
$person = new Person($db);

$dbMock = $this->getMockBuilder(Database::class)
 ->setMethods(['getPersonByID'])
 ->getMock();
$mockPerson = new stdClass();
$mockPerson->name = '梦回故里';
$dbMock->method('getPersonByID')->willReturn($mockPerson);
$test = new Person($dbMock);
$this->assertEquals('梦回故里', $test->greeting(2));

通过拦截orm操作数据库的方法,我们就可以对数据库方法进行测试。

使用第三方库

对于数据库的测试,我们还可以使用第三方库dbunit。

虽然使用orm进行数据库的mock可以模拟数据的操作和查询,但是毕竟没有操作数据库,因此还是有一定的问题存在,而dbunit解决了这个问题,它是真正去操作数据库。

总结

mock的出现为我们提供了一种新的测试方法,在不影响数据的情况下,使用mock进行测试可以大大提高我们的测试效率,同时它也避免了对环境的破坏。

  • 原标题:phpunit 中的mock

  • 本文由游戏app开发公司小编,整理排版发布,转载请注明出处。部分文章图片来源于网络,如有侵权,请与迪集网络联系删除。
  • 微信二维码

    CLWL6868

    长按复制微信号,添加好友

    微信联系

    在线咨询

    点击这里给我发消息QQ客服专员

    点击这里给我发消息电话客服专员

    在线咨询

    免费通话


    24h咨询☎️:132-5572-7217


    🔺🔺 24小时客服热线电话 🔺🔺

    免费通话
    返回顶部