我正在查看PHPUnit,以下内容使我感到困惑。 PHPUnit是否处理int。 1和0为布尔值?在我目前的测试中,没有。
示例:$this->assertTrue(preg_match('/asdf/', 'asdf'));
在我的测试中,此操作失败,因为preg_match()返回int 1或0,并且只有在出现错误时才返回false。
很明显,由于比较总是返回布尔值,因此我认为它具有以下作用。 $this->assertTrue(preg_match('/asdf/', 'asdf') === 1);
我是否在我的preg_match中缺少某些内容,或者我的断言是为了使其....不那么严格?
编辑:
assertTrue是否要求类型匹配?有什么方法可以使断言变得不那么严格?
参考方案
PHP具有单独的boolean
类型,其TRUE
和FALSE
的值(不区分大小写的常数)与1和0的整数值不同。
使用严格比较(===
)时,它不起作用:TRUE !== 1
和FALSE !== 0
。
当您使用类型杂耍时,TRUE
转换为1,而FALSE
转换为0(反之亦然,0转换为FALSE
,任何其他整数都转换为TRUE
)。因此,TRUE == 1
和FALSE == 0
。
在PHPUnit中,assertTrue
和assertFalse
是类型相关的严格检查。 assertTrue($x)
检查TRUE === $x
是否与assertSame(TRUE, $x)
相同,并且与assertEquals(TRUE, $x)
不同。
在您的情况下,一种可能的方法是使用显式类型转换:
$this->assertTrue((boolean)preg_match('/asdf/', 'asdf'));
但是,PHPUnit恰好具有专用的断言,用于根据正则表达式检查字符串:
$this->assertRegExp('/asdf/', 'asdf');
PHP strtotime困境 - php有人可以解释为什么这在我的服务器上输出为true吗?date_default_timezone_set('Europe/Bucharest'); var_dump( strtotime('29.03.2015 03:00', time()) === strtotime('29.03.2015 04:00…
PHP-全局变量的性能和内存问题 - php假设情况:我在php中运行一个复杂的站点,并且我使用了很多全局变量。我可以将变量存储在现有的全局范围内,例如$_REQUEST['userInfo'],$_REQUEST['foo']和$_REQUEST['bar']等,然后将许多不同的内容放入请求范围内(这将是适当的用法,因为这些数据指的是要求自…
php-casperjs获取内部文本 - php我正在为casperjs使用php包装器-https://github.com/alwex/php-casperjs我正在网上自动化一些重复的工作,我需要访问一个项目的innerText,但是我尚不清楚如何从casperjs浏览器访问dom。我认为在js中我会var arr = document.querySelector('label.input…
PHP-将日期插入日期时间字段 - php我已在数据库中使用datetime字段存储日期,使用PHP将“今天的日期”插入该字段的正确方法是什么?干杯, 参考方案 我认为您可以使用php date()函数
PHP-从最后一个循环中删除逗号 - php我在循环时有一个PHP,如果是最后一个循环,我想从,中删除最后一个逗号echo '],'; while($ltr = mysql_fetch_array($lt)){ echo '['; echo $ltr['days']. ' ,'. $ltr['name…