共计 1987 个字符,预计需要花费 5 分钟才能阅读完成。
本系列教程所有的 PHPUnit 测试基于 PHPUnit6.5.9 版本,Lumen 5.5 框架
前置
日常我们的普通用到的测试:
代码直接 echo,debug 等方法测试 -> 跟踪细节断点型测试
log 日志辅助测试 -> 跟踪细节断点型测试
辅助工具,postman 之类的做请求类测试 -> 请求类测试
浏览器直接测试 -> 浏览器测试
单元测试
单元测试是针对程序的最小单元来进行正确性检验的测试工作,程序单元就是应用的最小可测试部件,一个单元可能是单个程序,类,对象,方法等
单元测试是用来测试包或者程序的一部分代码或者一组代码的函数。测试的目的是确认目标代码在给定的场景下,有没有按照期望工作。
一个场景是正向路经测试,就是在正常执行的情况下,保证代码不产生错误的测试。这种测试可以用来确认代码可以成功地向数据库中插入一条工作记录。
另外一些单元测试可能会测试负向路径的场景,保证代码不仅会产生错误,而且是预期的错误。
这种场景下的测试可能是对数据库进行查询时没有找到任何结果,或者对数据库做了无效的更新。
在这两种情况下,测试都要验证确实产生了错误,且产生的是预期的错误。总之,不管如何调用或者执行代码,所写的代码行为都是可预期的
优点或改善解决问题
减少 bug
通过运行单元测试可以直接测试各个功能的正确性,有 bug 可以直接发现并解决,如果要等到跟其他的功能对接,进行连贯测试,测试比较麻烦,而且 bug 不能及早的发现并解决
快速定位 bug
如果是 web 项目的某一个功能,平常我们定位 bug 可能是页面输入值,后台断点,一步一步的需要 bug 位置,如果有编写单元测试,则可以直接修改数据,运行单元测试即可,快速有限
提高代码质量
如果每一个部件都是完美的,那么组合起来肯定也是完美的。整体代码质量就得到了保障
减少调试时间
当不知问题所在的时候,可能需要各种调试与运行,而如果所有的都有编写单元测试,那么可以直接运行单元测试,就能定位问题所在位置。
PHPUnit
PHPUnit 是一个面向 PHP 程序员的测试框架,这是一个 xUnit 的体系结构的单元测试框架。
版本
主版本
初始版本
PHP 兼容性
支持
后台框架对应版本
PHPUnit 8
2019 年 2 月 1 日
PHP 7.2, PHP 7.3, PHP 7.4
在 2021 年 2 月 5 日结束支持
PHPUnit 7
2018 年 2 月 2 日
PHP 7.1, PHP 7.2, PHP 7.3
在 2020 年 2 月 7 日结束支持
PHPUnit 6
2017 年 2 月 3 日
PHP 7.0, PHP 7.1, PHP 7.2
在 2019 年 2 月 1 日结束支持
*
PHPUnit 5
2015 年 10 月 2 日
PHP 5.6, PHP 7.0, PHP 7.1
在 2018 年 2 月 2 日结束支持
PHPUnit 4
2014 年 3 月 7 日
PHP 5.3, PHP 5.4, PHP 5.5, PHP 5.6
在 2017 年 2 月 3 日结束支持
你的第一个单元测试 demo
目录结构
tests
├── ExampleTest.php 测试用例
└── TestCase.php Lumen 自带测试基类,继承 PHPunit
代码
<?php
class ExampleTest extends TestCase
{
/**
* 测试断言成功.
*
* @return void
*/
public function testTrue()
{
$this->assertTrue(true);
}
/**
* 测试断言失败
*
* @return void
*/
public function testFailure()
{
$this->assertTrue(false);
}
/**
* 测试不加断言,risky.
*
* @return void
*/
public function testRisky()
{
}
}
运行
../vendor/bin/phpunit ExampleTest.php
输出
PHPUnit 6.5.9 by Sebastian Bergmann and contributors.
.FR 3 / 3 (100%)
Time: 902 ms, Memory: 10.00MB
There was 1 failure:
1) ExampleTest::testFailure
Failed asserting that false is true.
/web/www/wpt/gt-api/tests/ExampleTest.php:22
—
There was 1 risky test:
1) ExampleTest::testRisky
This test did not perform any assertions
FAILURES!
Tests: 3, Assertions: 2, Failures: 1, Risky: 1.
说明
3 个测试方法,2 个断言 一个断言失败,一个测试方法无断言
输出标识说明
.
当测试成功时输出。
F
当测试方法运行过程中一个断言失败时输出。
E
当测试方法运行过程中产生一个错误时输出。
R
当测试被标记为有风险时输出。
S
当测试被跳过时输出。
I
当测试被标记为不完整或未实现时输出。
参考
PHPUnit 6.5 官方文档