繁体   English   中英

使用PHPUnit声明异常

[英]Asserting exceptions using PHPUnit

我正在使用PHPUnit测试此功能:

public function testSetAdsData_dataIsNull()
{
    $dataArr = null;
    $fixture = new AdGroup();
    try {
        $fixture->setAdsData($dataArr);
    } catch (Exception $e) {
        $this->assertEquals($e->getCode(), 2);
    }

    $this->assertEmpty($fixture->ads);
    $this->assertEmpty($fixture->adIds);
}

有人告诉我这不是正确的方法,应该使用@expectedException ,所以我开始阅读该手册,并在此处找到一些答案,其中包括一个流行的答案: PHPUnit断言是否抛出异常?

但是,经过大量的阅读后,我仍然不明白除了最初的方法外,使用此方法还有什么好处。 我猜这与我不太了解如何使用它有关。 我尝试了不同的方法,但没有一个真正起作用。

我意识到我可以在代码中添加如下代码:

throw new MyException('Some Error Msg', 2);

但是然后我还需要使用try catch(或者据我所知),那么这样做有什么好处呢?

我在您的测试中发现了2个问题。

1)测试可以通过而不会引发异常。 函数调用后,应添加$this->fail('No Exception was thrown') 使用setExpectedException将为您完成此操作,如果不引发异常,则测试将失败。 就您而言,如果发生这种情况,您不会失败。 您需要设置一个标志并断言该异常是在catch块之后引发的。

2)您在测试中捕获了通用异常。 这不是一个好习惯。 如果您有一个使用模拟的测试,则通过引发异常来指示模拟失败的断言。 您的测试将在这里抓住并处理。 再次使您的测试似乎通过了,但实际上没有通过。 (这也可能在其他断言失败并试图修复测试时引起很多惊吓时表现出来)。

在示例测试中,您要使用try-catch,因为在执行代码后您将进行进一步的声明。 setExpectedException不允许您执行此操作。 在后台,此方法/注释将您的测试包装在自己的try catch中,并为您验证异常。 到底多少次正是您想要的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM