ThinkPHP 利用PHPUnit 进行简单的测试

 

先了解一下大概情况吧

这里利用的thinkphp 内置的test的扩展,对应的phpunit的版本为phpunit6版本。尽管是旧版本,做一些简单的测试还是可以的

 

安装phpunit

➜ wget http://phar.phpunit.cn/phpunit.phar

➜ chmod +x phpunit.phar

➜ sudo mv phpunit.phar /usr/local/bin/phpunit

➜ phpunit --version

安装thinkphp的test扩展

composer require topthink/think-testing=2.0.*

 安装完成之后,thinkphp目录下会多一个test目录

5b4f7ec227e30de886f0911811d9e980492.jpg

 

 

 

 

 

 

 

 

 

 

 

 

 

 

安装完成之后,thinkphp目录下会多一个test目录

 

如何进行测试

下面举一个例子ee866a9b2e3ba60ff479de4f35e7e5e6d6f.jpg

我们先写一个简单的service,然后在test 目录里面 写入

adebce9a860bbbd94980950933fd7de4ef6.jpg

现在就完成了一个简单地测试。测试这个service是否按照我们的想法进行运算。

我们使用命令行在根目录下 输入 php think unit

bb28a94a7f9dd298d47f9245f347e20dde3.jpg

显示测试完毕,正常显示。

 

断言函数

断言函数名(数组)作用断言函数名(对象)作用断言函数名(类)作用
assertEquals断言等于assertAttributeContains断言属性包含assertClassHasAttribute断言类有某属性
assertNotEquals断言不等于assertAttributeContainsOnly断言属性只包含assertClassHasStaticAttribute断言类有某静态属性
assertArrayHasKey断言有键assertAttributeEquals断言属性等于assertClassNotHasAttribute断言类没有某属性
assertArrayNotHasKey断言没有键assertAttributeGreaterThan断言属性大于assertClassNotHasStaticAttribute断言类没有某静态属性
assertContains断言包含assertAttributeGreaterThanOrEqual断言属性大于等于  
assertNotContains断言不包含assertAttributeLessThan断言属性小于  
assertContainsOnly断言只包含assertAttributeLessThanOrEqual断言属性小于等于  
assertNotContainsOnly断言不只包含assertAttributeNotContains断言不包含  
  assertAttributeNotContainsOnly断言属性不只包含  
  assertAttributeNotEquals断言属性不等于  
  assertAttributeNotSame断言属性不相同  
  assertAttributeSame断言属性相同  
  assertSame断言类型和值都相同  
  assertNotSame断言类型或值不相同  
  assertObjectHasAttribute断言对象有某属性  
  

assertObjectNotHasAttribute

断言对象没有某属性  
断言函数名(文件)作用断言函数名(XML)作用
assertFileEquals断言文件内容等于assertXmlFileEqualsXmlFile断言XML文件内容相等
assertFileExists断言文件存在assertXmlFileNotEqualsXmlFile断言XML文件内容不相等
assertFileNotEquals断言文件内容不等于assertXmlStringEqualsXmlFile断言XML字符串等于XML文件内容
assertFileNotExists断言文件不存在assertXmlStringEqualsXmlString断言XML字符串相等
  assertXmlStringNotEqualsXmlFile断言XML字符串不等于XML文件内容
  assertXmlStringNotEqualsXmlString断言XML字符串不相等

以上内容的assertEquals是所有断言函数的一种,具体用法可以自行百度,本文章日后会慢慢补充完毕。

 

基镜

目前以上内容已经可以测试每一个service的运行状况。但是有一部分service 需要有运行的前提条件,我们把创建基础环境或者依赖制作成可测试的状态成为基镜的搭建。

举个栗子,比如我们在测试新增管理员的时候需要依赖某个数据库的某个值。那么我们可以试试以下方法

<?php

namespace tests;

class ExampleTest extends TestCase
{
    protected $a;

    protected function setUp(): void
    {
        parent::setUp();
        //假设这里我们从数据库中查询出来的a的值为1
        $this->a=1;
    }
    

    public function testplanService():void
    {
        $test=new \app\index\service\Test;
        //这里我们可以灵活的使用这个a的值。不需要手动输入固定的值
        $this->assertEquals(2,$test->planService($this->a,1));
    }
}

测试数据的移除

我们在测试的时候难免会产生一系列测试数据,我们如何在测试完毕之后删除这些数据呢,看看以下的例子

<?php

namespace tests;

class ExampleTest extends TestCase
{
    protected $a;

    protected function setUp(): void
    {
        parent::setUp();
        $this->a=1;
    }
    

    public function testplanService():void
    {
        $test=new \app\index\service\Test;
        $this->assertEquals(2,$test->planService($this->a,1));
    }


    //运行测试完毕之后,测试框架会自动调用该类销毁数据库的插入数据等等
    protected function tearDown(): void
    {
        $this->assertEquals(1,1);
        //销毁数据操作
    }
}

数据供给器

现在假设有如下情况。

插入一个管理员记录,要求管理员的账号长度大于6位,小于9位。首字母大写等等。我们不可能一种情况一个个去测试,对于这种情况,我们可以利用数据供给器来提供批量的数据。

我们新建一个service类

<?php

namespace app\index\service;

class Admin
{
    public function add(string $username,string $password):bool
    {
        if(!preg_match('/^[A_Z]\S{6,8}$/',$username))
        {
            return false;
        }
        return true;
    }
}

下面我们补上测试代码

<?php
namespace tests;

use think\testing\TestCase;

class AddTest extends TestCase
{
    protected $add;

    protected function setUp(): void
    {
        $this->add=new \app\index\service\Admin;
    }

    /**
     * @dataProvider addData
     * @param string $usernmae
     * @param string $password
     */
    public function testAdd(string $username,string $password):void
    {
        $this->assertFalse($this->add->add($username,$password));
    }

    /**
     * 测试情况为true
     *
     * @return void
     */
    public function testAdd_true():void
    {
        //断言为true
        $this->assertTrue($this->add->add('A123456','1111'));
    }

    //add 方法数据供给器
    public function addData()
    {
        return [
            //数据小于6位
            ['s123','1111'],
            //数据大于9位
            ['A123456789','1111'],
            //首字符小写
            ['s1234567','1111']
        ];
    }
}

补上结果

localhost:think yehua$ php think unit
PHPUnit 6.5.14 by Sebastian Bergmann and contributors.

....                                                                4 / 4 (100%)

Time: 92 ms, Memory: 6.00MB

OK (4 tests, 4 assertions)

以上内容就是最简单的测试方法。合理利用这些方法。可以让你的程序更加健壮。

转载于:https://my.oschina.net/u/4173863/blog/3083541

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ThinkPHP是一种十分流行的PHP开发框架,它提供了丰富的工具来简化和加速Web应用程序的开发过程。下面是一些ThinkPHP常用的工具: 1. ThinkPHP代码生成器:包括模块、控制器、模型、视图等代码生成器工具,可以根据数据库表结构自动生成对应的代码文件,大大减少了开发者的重复工作量。 2. 数据库迁移工具:通过数据库迁移工具,可以方便地管理数据库的变更,例如创建表、添加字段、修改约束等操作。它避免了手动修改数据库结构的麻烦,同时还可以轻松实现多人协同开发。 3. 调试工具:ThinkPHP提供了强大的调试工具,可以帮助开发者在开发过程中定位问题。它可以显示详细的错误信息,包括错误代码、错误信息、错误位置等,方便快速调试和修复代码错误。 4. 缓存工具:ThinkPHP支持各种类型的缓存机制,包括文件缓存、数据库缓存、Redis缓存等。缓存机制可以有效地提高系统的响应速度,减轻数据库的负载。 5. 表单验证工具:ThinkPHP内置了强大的表单验证工具,可以方便地进行表单数据验证。开发者只需在控制器或模型中定义好验证规则,框架会自动进行数据验证,并返回验证结果。 6. 模板引擎:ThinkPHP自带的模板引擎功能强大,支持模板继承、布局、模板变量传递等功能。开发者可以通过模板引擎快速构建出美观、可维护的页面。 总之,ThinkPHP提供了一系列实用工具,帮助开发者提高开发效率,简化代码开发过程。无论是代码生成器、数据库迁移工具还是调试工具等,都为开发者提供了很多便利和支持。通过使用这些工具,开发者可以更加专注于业务逻辑的实现,快速构建出高质量的Web应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值