對(duì) PHP 錯(cuò)誤進(jìn)行測(cè)試

2018-02-24 15:41 更新

對(duì) PHP 錯(cuò)誤進(jìn)行測(cè)試

默認(rèn)情況下,PHPUnit 將測(cè)試在執(zhí)行中觸發(fā)的 PHP 錯(cuò)誤、警告、通知都轉(zhuǎn)換為異常。利用這些異常,就可以,比如說(shuō),預(yù)期測(cè)試將觸發(fā) PHP 錯(cuò)誤,如Example?2.14, “用 @expectedException 來(lái)預(yù)期 PHP 錯(cuò)誤”所示。

Note

PHP 的 error_reporting 運(yùn)行時(shí)配置會(huì)對(duì) PHPUnit 將哪些錯(cuò)誤轉(zhuǎn)換為異常有所限制。如果在這個(gè)特性上碰到問(wèn)題,請(qǐng)確認(rèn) PHP 的配置中沒(méi)有抑制想要測(cè)試的錯(cuò)誤類型。

Example?2.14.?用 @expectedException 來(lái)預(yù)期 PHP 錯(cuò)誤

<?php
class ExpectedErrorTest extends PHPUnit_Framework_TestCase
{
    /**
     * @expectedException PHPUnit_Framework_Error
     */
    public function testFailingInclude()
    {
        include 'not_existing_file.php';
    }
}
?>
phpunit -d error_reporting=2 ExpectedErrorTest

PHPUnit 5.0.0 by Sebastian Bergmann and contributors.

.

Time: 0 seconds, Memory: 5.25Mb

OK (1 test, 1 assertion)

PHPUnit_Framework_Error_NoticePHPUnit_Framework_Error_Warning 分別代表 PHP 通知與 PHP 警告。

Note

對(duì)異常進(jìn)行測(cè)試是越明確越好的。對(duì)太籠統(tǒng)的類進(jìn)行測(cè)試有可能導(dǎo)致不良副作用。因此,不再允許用 @expectedExceptionsetExpectedException() 對(duì) Exception 類進(jìn)行測(cè)試。

如果測(cè)試依靠會(huì)觸發(fā)錯(cuò)誤的 PHP 函數(shù),例如 fopen ,有時(shí)候在測(cè)試中使用錯(cuò)誤抑制符會(huì)很有用。通過(guò)抑制住錯(cuò)誤通知,就能對(duì)返回值進(jìn)行檢查,否則錯(cuò)誤通知將會(huì)導(dǎo)致拋出 PHPUnit_Framework_Error_Notice。

Example?2.15.?對(duì)會(huì)引發(fā)PHP 錯(cuò)誤的代碼的返回值進(jìn)行測(cè)試

<?php
class ErrorSuppressionTest extends PHPUnit_Framework_TestCase
{
    public function testFileWriting() {
        $writer = new FileWriter;
        $this->assertFalse(@$writer->write('/is-not-writeable/file', 'stuff'));
    }
}
class FileWriter
{
    public function write($file, $content) {
        $file = fopen($file, 'w');
        if($file == false) {
            return false;
        }
        // ...
    }
}

?>
phpunit ErrorSuppressionTest

PHPUnit 5.0.0 by Sebastian Bergmann and contributors.

.

Time: 1 seconds, Memory: 5.25Mb

OK (1 test, 1 assertion)

如果不使用錯(cuò)誤抑制符,此測(cè)試將會(huì)失敗,并報(bào)告 ~~~
fopen(/is-not-writeable/file): failed to open stream: No such file or directory

~~~。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)