您现在的位置是:群英 > 开发技术 > PHP语言
PHPUnit在PHP项目中如何用?什么是PHPUnit?
Admin发表于 2022-07-26 17:47:33588 次浏览
这篇文章主要给大家介绍“PHPUnit在PHP项目中如何用?什么是PHPUnit?”的相关知识,下文通过实际案例向大家展示操作过程,内容简单清晰,易于学习,有这方面学习需要的朋友可以参考,希望这篇“PHPUnit在PHP项目中如何用?什么是PHPUnit?”文章能对大家有所帮助。

镜像地址 : PHPUnit简介以及如何在项目中使用 - 多厘(https://wulicode.com/php/vendor/phpunit-at-project/index.html)

官方文档:https://phpunit.readthedocs.io/zh_CN/latest/

单元测试介绍

单元测试是分别对程序的单元(方法, 函数)进行测试,判断执行结果是否符合预期

单元测试能协助开发者什么?

1.确保单元的执行结果

2.尽早发现程序中的错误

3.修改程序, 更加有信心

PHPUnit

PHPUnit 是 PHP 程式语言中最常见的单元测试 (unit testing) 框架,PHPUnit 是参考 xUnit 架构利用 PHP 实作出来。

安装PHPUnit

# 项目中安装
$ composer require --dev phpunit/phpunit

# 下载到本地
$ wget https://phar.phpunit.de/phpunit-9.phar

使用项目中安装可以在项目中直接运行, 无需太多配置, 将 phar 下载到非项目文件夹, 可以减少项目代码的体积, 我一般采用下载到本地, 然后多个项目公用一个 phpunit.phar, 减少项目体积, 不过需要在 IDE中增加更多配置

配置autoload

添加下面的代码到composer.json PackageName是项目的名称,src是包含PHP class文件的文件夹地址,项目根目录下的子文件夹。

...
    "autoload": {
       "psr-4": {
            "PackageName\\": "src/",
            "PackageName\\Tests": "tests/"
        }
     },
...

设置PHPUnit

在phpstorm中 Languages & Frameworks >PHP >Test Frameworks 根据不同的加载方式设置不同的配置

如果是项目额外加载, 则需要把 phpunit 所在的文件夹作为 library 加入项目, 便于代码提示 Preferences | Languages & Frameworks | PHP , 加入 phpunit 文件夹

编写PHPUnit测试

  • 针对类 Example 的测试写在类 ExampleTest 中, ExampleTest 继承自 TestCase

  • 对于方法的测试命名为 test* 的公用方法

  • 在测试方法内,类似于 assertEquals() 的断言方法用来对实际值和预期值的匹配做出验证

ArrayTest 用 PHPUnit 测试数组操作

<?php
use PHPUnit\Framework\TestCase;

class ArrayTest extends TestCase
{
    public function testPushAndPop()
    {
        $stack = [];
        $this->assertCount(0, $stack);

        $stack[] = 'foo';
        $this->assertEquals('foo', $stack[count($stack) - 1]);
        $this->assertCount(1, $stack);

        $this->assertEquals('foo', array_pop($stack));
        $this->assertCount(0, $stack);
    }
}

在 IDE 中运行

  • 点击方法名称
  • 右键测试类
  • 右键测试文件夹

PHPUnit 断言

laravel 中除了标准的 PHPUnit 断言(assertEquals(), assertContains(), assertInstanceOf(), …更多断言请看https://phpunit.readthedocs.io/zh_CN/latest/assertions.html?highlight=assertTrue#)之外, 还存在很多允许测试 web 应用的检测项目

assertPageLoaded($uri, $message = null)

检测最近的页面是否被加载, 如果不存在 url / message 时候会报错

assertResponseOk()

是否页面相应OK

assertReponseStatus($code)

是否响应指定的code

assertViewHas($key, $value = null)

视图中是否存在指定的数据

assertViewHasAll($bindings)

视图中是否存在指定的一系列数据

assertViewMissing($key)

指定视图中是否不存在这个数据

assertRedirectedTo($uri, $with = [])

检测是否重定向到指定的uri

assertRedirectedToRoute($name, $parameters = [], $with = [])

是否客户端重定向到指定的路由

assertRedirectedToAction($name, $parameters = [], $with = [])

是否重定向到 action

assertSessionHas($key, $value = null)

session 中是否存在 key/ value

assertSessionHasAll($bindings)

session 中是否存在指定的 kv

assertSessionHasErrors($bindings = [])

session 是否存在错误

assertHasOldInput()

session 中是否存在以前的数据

示例 xml 文件

phpunit.xml at 9.x · laravel

https://github.com/laravel/laravel/blob/9.x/phpunit.xml

<?xml version="1.0" encoding="UTF-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="./vendor/phpunit/phpunit/phpunit.xsd"
    bootstrap="vendor/autoload.php"
    colors="true">
    <testsuites>
        <testsuite name="Unit">
            <directory suffix="Test.php">./tests/Unit</directory>
        </testsuite>
        <testsuite name="Feature">
            <directory suffix="Test.php">./tests/Feature</directory>
        </testsuite>
    </testsuites>
    <coverage processUncoveredFiles="true">
        <include>
            <directory suffix=".php">./app</directory>
        </include>
    </coverage>
    <php>
        <env name="APP_ENV" value="testing"/>
        <env name="BCRYPT_ROUNDS" value="4"/>
        <env name="CACHE_DRIVER" value="array"/>
        <!-- <env name="DB_CONNECTION" value="sqlite"/> -->
        <!-- <env name="DB_DATABASE" value=":memory:"/> -->
        <env name="MAIL_MAILER" value="array"/>
        <env name="QUEUE_CONNECTION" value="sync"/>
        <env name="SESSION_DRIVER" value="array"/>
        <env name="TELESCOPE_ENABLED" value="false"/>
    </php>
</phpunit>

Php 的单元覆盖率

安装 xdebug / Phpunit

# 安装 xdebug
$ pecl install xdebug

启用 xdebug

# php.ini 文件
xdebug.mode = coverage



到此这篇关于“PHPUnit在PHP项目中如何用?什么是PHPUnit?”的文章就介绍到这了,感谢各位的阅读,更多相关PHPUnit在PHP项目中如何用?什么是PHPUnit?内容,欢迎关注群英网络资讯频道,小编将为大家输出更多高质量的实用文章!

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。

标签: php
相关信息推荐
2022-12-24 11:47:01 
摘要:转换步骤:1、使用foreach语句通过引用循环的方式遍历数组,语法“foreach ($array as &$value){//循环体语句块;}”;2、在循环体中,使用is_int()函数判断元素“$value”是否为整数类型,如果不是则使用intval()函数将其转为int类型,语法“if(!is_int($value)){$value=intval($value);}”。
2022-07-21 17:54:01 
摘要:bootstrap input样式修改的方法:首先创建一个label;然后写一个input,类型设置为file;接着调用button default的样式;最后根据button的颜色进行修改即可。
2022-06-20 16:58:25 
摘要:bootstrap关闭tab的方法:首先引入jquery;然后在相应的页面中引用“bootstrap-closable-tab”插件来实现可关闭的tab标签页效果即可。
云活动
推荐内容
热门关键词
热门信息
群英网络助力开启安全的云计算之旅
立即注册,领取新人大礼包
  • 联系我们
  • 24小时售后:4006784567
  • 24小时TEL :0668-2555666
  • 售前咨询TEL:400-678-4567

  • 官方微信

    官方微信
Copyright  ©  QY  Network  Company  Ltd. All  Rights  Reserved. 2003-2019  群英网络  版权所有   茂名市群英网络有限公司
增值电信经营许可证 : B1.B2-20140078   粤ICP备09006778号
免费拨打  400-678-4567
免费拨打  400-678-4567 免费拨打 400-678-4567 或 0668-2555555
微信公众号
返回顶部
返回顶部 返回顶部