PHPUnit实践一(初识)
本系列教程所有的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实践一(初识)的更多相关文章
- phpunit实践笔记
phpunit成为单元测试的代名词已成为共识, 但很多在实际编写测试过程中遇到的很多问题通过手册.网上搜索都很难找到相关资料, 大部分都得通过查看源代码和实践的代码经验解决.欢迎大家拍砖.(在此之前请 ...
- MatrixOne从入门到实践01——初识MatrixOne
初识MatrixOne 简介 MatrixOrigin 矩阵起源 是一家数据智能领域的创新企业,其愿景是成为数字世界的核心技术提供者. 物理世界的数字化和智能化无处不在.我们致力于建设开放的技术开源社 ...
- 四、harbor实践之初识harbor
1 什么是Harbor harbor是VMware公司开源的企业级Registry项目,其的目标是帮助用户迅速搭建一个企业级的Docker registry 服务. 2 什么是Registry Reg ...
- 初识 PHPunit stub 模拟返回数据
这是这段时间以来结合 PHPunit 文档和大牛们的讲解,想记录下自己学习到的知识,未来参考补充,完善学到的东西 我们一般使用单测对公司业务里的代码进行测试,他会帮忙找到你的一个个小小的思考不够全面的 ...
- 5分钟windows wamp php安装phpunit 2015最新安装实践
16:11 2015/11/235分钟windows wamp php安装phpunit 2015最新安装实践我花了一个下午和一个上午的时间注意:步骤中添加环境变量多的时候要保存很多步,知道窗口都自动 ...
- phpunit测试成功 phpunit测试实践代码
16:12 2015/12/8phpunit测试成功,代码写在www目录下,以类名命名代码文件,我的文件名为 ArrayTest.php,类名为ArrayTest,内部写了简单的测试代码:<?p ...
- TURN协议初识及turnserver实践
WebRTC协议栈 图一 WebRTC stack TURN的全称为Traversal Using Relays around NAT,是STUN/RFC5389的一个拓展,主要添加了Relay功能. ...
- tensorFlow入门实践(三)初识AlexNet实现结构
参考黄文坚<TensorFlow实战>一书,完成AlexNet的整体实现并展望其训练和预测过程. import tensorflow as tf batch_size = 32 num_b ...
- 【大型网站技术实践】初级篇:借助Nginx搭建反向代理服务器
一.反向代理:Web服务器的“经纪人” 1.1 反向代理初印象 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从 ...
随机推荐
- [福大软工] Z班 第13次成绩排行榜
注:本次成绩排行榜是针对华为软件云评测博客 作业要求 http://www.cnblogs.com/easteast/p/7772637.html 评分细则 (1)寻找软件的bug,功能的评测与黑箱测 ...
- C语言入坑指南-被遗忘的初始化
前言 什么是初始化?为什么要初始化?静态变量和局部变量的初始化又有什么区别?实际应用中应该怎么做?本文将一一回答这些问题. 什么是初始化 初始化指的是对数据对象或者变量赋予初始值.例如: int va ...
- DP h回文子串 LCS
题目背景 IOI2000第一题 题目描述 回文词是一种对称的字符串.任意给定一个字符串,通过插入若干字符,都可以变成回文词.此题的任务是,求出将给定字符串变成回文词所需要插入的最少字符数. 比如 “A ...
- python六十七课——网络编程(基础知识了解)
网络编程: 什么是网络编程? 网络:它是一种隐形的媒介:可以将多台计算机使用(将它们连接到一起) 网络编程:将多台计算机之间可以相互通信了(做数据交互) 一旦涉及到网络编程,划分为两个方向存在,一方我 ...
- cents上运行wget报错:unable to resolve host address
wget命令报错.无法解析域名"www.keepalived.rog" [vagrant@RS1 download]$ wget http://www.keepalived.org ...
- Scala主构造器参数是否升级为成员与是否有get/set
1:主构造器前面添加val/var 关键字则升级为类成员,否则只是构造器中的一个参数而已. 2:private 修饰get/set方法权限,private var/val 成员变量,则有get/set ...
- 001_python单元测试
一.同事推荐的 pytest库 ==> 官网:http://doc.pytest.org/en/latest/ github地址==>https://github.com/pytest-d ...
- ESP8266串口和MQTT服务器消息互传(版本一) 单纯透传+保存WIFI账号信息
目标 制作一个ESP8266串口和MQTT相互透传的小WIFI,可用手机修改其连接的路由器,由此该模块可以任意加载到各种串口传输的单片机上,完成硬件到云端的传输. 1 实物图 2 MQTT网页测试客户 ...
- from __future__ import包的作用
__future__是python2的概念,其实是为了使用python2时能够去调用一些在python3中实现的特性 1.absolute_import from __future__ import ...
- hadoop学习笔记叁--简单应用
1.通过命令向HDFS传输文件 上传:./hadoop fs -put hdfs.cmd (本地文件名) hdfs://主机名称:9000/ hadoop fs -copyFromLoca ...