php 7.2一个非常好的数值遇到测试失败,但为什么?

时间:2017-09-19 03:11:58

标签: php unit-testing phpunit

好,所以这是一个简单的单元测试,只有字符串以数字开头才会失败。

我原来的课程在这里

class InstanceID implements InstanceIDInterface
{
    private $id;
    public function __construct(int $id)
    {
        $this->id = $id;
    }
}

这是单元测试

class InstanceIDTest extends \PHPUnit_Framework_TestCase
{
     public function testCanInitializeWithValidID()
     {
          $InstanceID = new InstanceID(3456);

          $this->assertInstanceOf('InstanceID', $InstanceID);
    }


    /**
     * @dataProvider invalidStrings
     */
    public function testNonNumericStringShouldNotBeAccepted($id)
    {
        $this->expectException(TypeError::class);
        $InstanceID = new InstanceID($id);
    }

    public function invalidStrings() {
        return [
            ["ABC1234"], // works
            ["1234WUK"], // error
            ["W1234W"], // works
            ["1234yHk92383"] // error
        ];
    }

}

这是测试运行结果

There were 2 errors:

1) InstanceIDTest::testNonNumericStringShouldNotBeAccepted with data set #1 ('1234WUK')
A non well formed numeric value encountered

2) InstanceIDTest::testNonNumericStringShouldNotBeAccepted with data set #3 ('1234yHk92383')
A non well formed numeric value encountered

问题是错误未被捕获的原因     $这 - > expectException(类型错误::类); 线?

1 个答案:

答案 0 :(得分:2)

因为它不是例外而是通知。

要使其为TypeError,您需要启用严格类型检查

declare(strict_types=1);

位于InstanceID文件的顶部。

现在发生的事情是 - "1234WUK"被隐式转换为带有通知的1234整数。