本系列教程全部的PHPUnit测试基于PHPUnit6.5.9
版本,Lumen 5.5
框架php
平常咱们的普通用到的测试:html
单元测试是针对程序的最小单元来进行正确性检验的测试工做,程序单元就是应用的最小可测试部件,一个单元多是单个程序,类,对象,方法等程序员
单元测试是用来测试包或者程序的一部分代码或者一组代码的函数。测试的目的是确认目标代码在给定的场景下,有没有按照指望工做。web
一个场景是正向路经测试,就是在正常执行的状况下,保证代码不产生错误的测试。这种测试能够用来确认代码能够成功地向数据库中插入一条工做记录。数据库
另一些单元测试可能会测试负向路径的场景,保证代码不只会产生错误,并且是预期的错误。api
这种场景下的测试多是对数据库进行查询时没有找到任何结果,或者对数据库作了无效的更新。浏览器
在这两种状况下,测试都要验证确实产生了错误,且产生的是预期的错误。总之,无论如何调用或者执行代码,所写的代码行为都是可预期的框架
减小bug函数
经过运行单元测试能够直接测试各个功能的正确性,有bug能够直接发现并解决,若是要等到跟其余的功能对接,进行连贯测试,测试比较麻烦,并且bug不能及早的发现并解决
快速定位bug工具
若是是web项目的某一个功能,日常咱们定位bug多是页面输入值,后台断点,一步一步的须要bug位置,若是有编写单元测试,则能够直接修改数据,运行单元测试便可,快速有限
提升代码质量
若是每个部件都是完美的,那么组合起来确定也是完美的。总体代码质量就获得了保障
减小调试时间
当不知问题所在的时候,可能须要各类调试与运行,而若是全部的都有编写单元测试,那么能够直接运行单元测试,就能定位问题所在位置。
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日结束支持 |
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 当测试被标记为不完整或未实现时输出。