gpt4 book ai didi

PHPUnit 断言 True One (1)

转载 作者:行者123 更新时间:2023-12-01 23:14:58 25 4
gpt4 key购买 nike

我正在查看 PHPUnit,下面的内容让我想知道。 PHPUnit 是否处理 int。 1 和 0 是 bool 值吗?在我当前的测试中,情况并非如此。

示例:$this->assertTrue(preg_match('/asdf/', 'asdf'));

在我的测试中,这失败了,因为 preg_match() 返回 int 1 或 0,并且只有在出现错误时才返回 bool false。

显然,我认为以下工作有效,因为比较总是返回 bool 值。 $this->assertTrue(preg_match('/asdf/', 'asdf') === 1);

我是否在 preg_match 中遗漏了某些内容,或者我的断言使其......不那么严格?

编辑:assertTrue 是否需要类型匹配?有什么办法可以让断言不那么严格吗?

最佳答案

PHP 有单独的 boolean 类型,其值 TRUEFALSE(不区分大小写的常量)与整数值 1 不同和 0。

当您使用严格比较 (===) 时,它不起作用:TRUE !== 1FALSE !== 0.

当您使用类型杂耍时,TRUE 会转换为 1,FALSE 会转换为 0(反之亦然,0 会转换为 FALSE) code>,任何其他整数都会转换为 TRUE)。因此,TRUE == 1FALSE == 0

在 PHPUnit 中,assertTrueassertFalse 是依赖于类型的严格检查。 assertTrue($x) 检查是否 TRUE === $x,它与 assertSame(TRUE, $x) 相同,而不是与 assertEquals(TRUE, $x) 相同。

在您的情况下,一种可能的方法是使用显式类型转换:

$this->assertTrue((boolean)preg_match('/asdf/', 'asdf'));

但是,PHPUnit 恰好有专门的断言来根据正则表达式检查字符串:

$this->assertRegExp('/asdf/', 'asdf');

关于PHPUnit 断言 True One (1),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18645727/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com