博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
assert用于PHP的debug
阅读量:6768 次
发布时间:2019-06-26

本文共 1804 字,大约阅读时间需要 6 分钟。

hot3.png

在说assert之前,先说一下assert的选项配置函数assert_options()。

mixed assert_options ( int $what [, mixed $value ] )常量                 INI设置               默认值   描述ASSERT_ACTIVE	    assert.active	    1	启用 assert() 断言ASSERT_WARNING	    assert.warning	    1	为每个失败的断言产生一个 PHP 警告(warning)ASSERT_BAIL         assert.bail             0	在断言失败时中止执行ASSERT_QUIET_EVAL   assert.quiet_eval       0	在断言表达式求值时禁用 error_reportingASSERT_CALLBACK	    assert.callback	 (NULL)	断言失败时调用回调函数

再说assert()

php官方手册对assert的描述是检查一个断言是否为false。

在php5中,assert的函数描述为bool assert ( mixed $assertion [, string $description ] )在php7中,assert的函数描述为bool assert ( mixed $assertion [, Throwable $exception ] )

如果 assertion 是字符串,它将会被 assert() 当做 PHP 代码来执行。 assertion 是字符串的优势是当禁用断言时它的开销会更小,并且在断言失败时消息会包含 assertion 表达式。 这意味着如果你传入了 boolean 的条件作为assertion,这个条件将不会显示为断言函数的参数;在调用你定义的assert_options()处理函数时,条件会转换为字符串,而布尔值 FALSE 会被转换成空字符串。

assert() 回调函数在构建自动测试套件的时候尤其有用,因为它们允许你简易地捕获传入断言的代码,并包含断言的位置信息。 当信息能够被其他方法捕获,使用断言可以让它更快更方便!

回调函数应该接受三个参数。 第一个参数包括了断言失败所在的文件。 第二个参数包含了断言失败所在的行号,第三个参数包含了失败的表达式(如有任意 — 字面值例如 1 或者 "two" 将不会传递到这个参数)。 PHP 5.4.8 及更高版本的用户也可以提供第四个可选参数,如果设置了,用于将 description 指定到 assert()。

对于对面对象来说,最小的单元是方法,assert在做单元测试的时候尤为有效。

下面简单模拟一个断言测试

Assertion Failed:File '$file'
Line '$line'
Code '$code'
Msg '$msg'

";}function testUnit($method,$arguments,$expect) { assert_options(ASSERT_ACTIVE,1); assert_options(ASSERT_WARNING,0); assert_options(ASSERT_CALLBACK,'my_assert_handler'); $str = "$method("; foreach($arguments as $v) { $str .= $v .','; } $str = substr($str, 0,-1); $str .= ')'; assert("$str == $expect","the result of $method is unexpecting");}testUnit('test',array(1,2),3);testUnit('test',array(1,2),4);testUnit('test',array(4,5),9);testUnit('test',array(3,7),11);?>

164135_P648_2667773.png

期望值与实际结果不同的,则会调用回调函数,就得知那些方法与预期不符

转载于:https://my.oschina.net/OSrainn/blog/726578

你可能感兴趣的文章
前端在h5页面调起微信支付接口和支付宝接口(日常笔记)
查看>>
Bundler 2.0 发布
查看>>
自动化部署工具Syncd v1.1.0发布,提供二进制安装包
查看>>
一位老码农的分享:一线程序员该如何面对「中年危机」?
查看>>
关于ES6深度拷贝
查看>>
财会小白的办公室自救指南
查看>>
Java核心技术笔记 接口、lambda表达式与内部类
查看>>
Docker 验证 Centos7.2 离线安装 Docker 环境
查看>>
【译】你可能不需要派生状态
查看>>
自动化瓦力多渠道打包python脚本
查看>>
各类型的 toString 方法合集
查看>>
Python爬虫 --- 2.4 Scrapy之天气预报爬虫实践
查看>>
GAN是一种特殊的损失函数?
查看>>
数据告诉我们:什么样的程序员最抢手!
查看>>
javascript 正则表达式 (一)
查看>>
mac虚拟环境下linux系统搭建及系统初始化记录——使用VMWare及RHEL 7
查看>>
如何解决pip install Twisted时出错: limits.h: No such file or directory
查看>>
交互式数据可视化-D3.js(二)选择集和数据
查看>>
Logan:美团点评的开源移动端基础日志库
查看>>
怎样给一个Vue页面添加大纲导航
查看>>