< php assert,assert用于PHP的debug

在说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_reporting

ASSERT_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在做单元测试的时候尤为有效。

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

function test($a,$b){

return $a+$b;

}

function my_assert_handler($file, $line, $code, $msg)

{

echo "


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);

?>

0731f84f8df362c484c9a036d47a1411.png

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值