镜像地址 : 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
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 文件
<?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
推荐学习:《PHP教程》
原文地址:https://www.jb51.cc/php/2915413.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。