使用 PHPUnit 断言异常

Llu*_*rer 3 php testing phpunit

我有一个函数来计算一个平方的值,我想对此进行测试。

函数平方是这样的:

 public function squaring($number)
    {
        if ($number == 0) {
            throw new InvalidDataException("0 can't be squared");
        }

        return $number * $number;
    }
Run Code Online (Sandbox Code Playgroud)

测试的第一步是检查它是否正确:

  public function testIfSquaringIsCorrect()
    {
        $number = 2;

        $result = $this->modelPractice->squaring($number);

        $this->assertEquals(4, $result);
    }
Run Code Online (Sandbox Code Playgroud)

最后一步检查我是否收到异常。

我该怎么做?

我像这样尝试但它不起作用:

  public function testSquaringLaunchInvalidDataException()
{
    $number = 0;

    $result = $this->modelPractice->squaring($number);

    $expected = $this->exceptException(InvalidDataException::class);

    $this->assertEquals($expected, $result);
}
Run Code Online (Sandbox Code Playgroud)

谢谢!

FMK*_*FMK 6

Phpunit 有专门的异常断言:

$this->expectException(InvalidArgumentException::class);
Run Code Online (Sandbox Code Playgroud)

请参阅:https : //phpunit.de/manual/current/en/writing-tests-for-phpunit.html#writing-tests-for-phpunit.exceptions

  • 我建议不要检查异常消息值,作为规则,它们应该供用户(或至少是开发人员)阅读。修复拼写错误或针对不同语言进行本地化不应导致测试失败!检查异常类和代码对于单元测试应该没问题(并且制作自己的自定义异常来识别各种错误类别绝对是一个想法) (2认同)