当我运行 PHPUnit 6.5.13 并有一个遵循此示例的测试方法 PHPUnit 测试异常文档
public function testSetRowNumberException()
{
$this->expectException(InvalidArgumentException::class);
$result = $this->tableCell->setRowNumber('text');
}
测试此方法:
public function setRowNumber(int $number) : TableCell
{
if (!is_int($number)) {
throw new InvalidArgumentException('Input must be an int.');
}
$this->rowNumber = $number;
return $this;
}
我得到了这个失败:
无法断言类型为"类型错误"的异常与预期的异常"无效参数异常"匹配。
问题是为什么"TypeError"
被带到断言以及如何使断言使用InvalidArgumentException
?
知道了。问题是我使用键入设置来int
这就是为什么代码甚至没有到达 thow 命令的原因。
如果测试的方法没有将类型设置为int
,则它可以工作:
public function setRowNumber($number) : TableCell
{
if (!is_int($number)) {
throw new InvalidArgumentException('Input must be an int.');
}
$this->rowNumber = $number;
return $this;
}
或者当测试有TypeError
public function testSetRowNumberException()
{
$this->expectException(TypeError::class);
$result = $this->tableCell->setRowNumber('text');
}
我将保留第二个示例。