好,所以这是一个简单的单元测试,只有字符串以数字开头才会失败。
我原来的课程在这里
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(类型错误::类); 线?
答案 0 :(得分:2)
因为它不是例外而是通知。
要使其为TypeError
,您需要启用严格类型检查
declare(strict_types=1);
位于InstanceID
文件的顶部。
现在发生的事情是 - "1234WUK"
被隐式转换为带有通知的1234
整数。