加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHPUnit assertEquals严格类型检查

发布时间:2020-12-13 22:26:54 所属栏目:PHP教程 来源:网络整理
导读:我的目标是确保对象图具有预期的值和类型.我想确保每个值都是预期的类型. 为此,遗憾的是,assertEquals()没有用处: $this-assertEquals( [ 'prop' = '0' ],[ 'prop' = 0 ]);// - no failures 在这种情况下,assertSame()运行良好: $this-assertSame( [ 'prop
我的目标是确保对象图具有预期的值和类型.我想确保每个值都是预期的类型.

为此,遗憾的是,assertEquals()没有用处:

$this->assertEquals(
    [ 'prop' => '0' ],[ 'prop' => 0 ]
);
// -> no failures

在这种情况下,assertSame()运行良好:

$this->assertSame(
    [ 'prop' => '0' ],[ 'prop' => 0 ]
);
// Failed asserting that Array &0 (
//     'prop' => 0
// ) is identical to Array &0 (
//     'prop' => '0'
// ).

assertSame()的问题是它还检查对象的引用:

$this->assertSame(
    (object) [ 'prop' => 0 ],(object) [ 'prop' => 0 ]
);
// Failed asserting that two variables reference the same object.

我有什么选择?

另外,我不确定为什么这是以这种方式设计的 – 对我来说,感觉assertSame()一次做两件事(我最多只有经过验证的对象类,而不是引用).

解决方法

您可以先检查数组密钥是否存在,然后检查是否有正确的类型,例如:

$this->assertArrayHasKey('prop',$input);
    $this->assertInternalType(PHPUnit_Framework_Constraint_IsType::TYPE_INT,$input['prop']);
    // or more simply as this->assertTrue(is_int($new_id));
    $this->assertEquals(0,$input['prop']);

希望这个帮助

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读