PHPUnit中的断言异常

3

我有一个计算正方形面积的函数,现在想要进行测试。

这个正方形函数如下:

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

        return $number * $number;
    }

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

  public function testIfSquaringIsCorrect()
    {
        $number = 2;

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

        $this->assertEquals(4, $result);
    }

最后一步是检查是否出现异常。

我该如何做呢?

我尝试了以下方式,但它没有起作用:

  public function testSquaringLaunchInvalidDataException()
{
    $number = 0;

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

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

    $this->assertEquals($expected, $result);
}

谢谢!


阅读关于测试异常的文档。 - brombeer
2
你拼错了expectException()的名称。它必须在运行抛出异常的代码($this->modelPractice->squaring($number);)之前被调用。在这之后,测试代码甚至都不会运行,因为被测试的代码已经抛出了异常,却没有被任何人捕获到。 - axiac
1个回答

7

在发布问题之前,我阅读了它,我认为我理解了,但现在我需要将预期的异常与实际得到的异常进行比较。我会更新我的代码并重新提问,你知道错在哪里吗?@FMK - Lluís Puig Ferrer
1
从我发布的链接中:除了expectException()方法外,还存在expectExceptionCode()、expectExceptionMessage()和expectExceptionMessageRegExp()方法,用于设置代码测试期间引发异常的预期。通过这些方法,您可以访问所有异常信息!这应该可以解决您的问题吧? - FMK
2
我建议不要检查异常消息的值,因为通常它们应该是供用户(或至少是开发人员)阅读的。修正拼写错误或本地化到不同的语言不应导致测试失败!检查异常类和代码对于单元测试来说应该是可以的(并且制作自己的自定义异常以识别各种错误类别绝对是个好主意)。 - GordonM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接