對 PHP 錯誤進行測試

2018-02-24 15:41 更新

對 PHP 錯誤進行測試

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

Note

PHP 的 error_reporting 運行時配置會對 PHPUnit 將哪些錯誤轉換為異常有所限制。如果在這個特性上碰到問題,請確認 PHP 的配置中沒有抑制想要測試的錯誤類型。

Example?2.14.?用 @expectedException 來預期 PHP 錯誤

<?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

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

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

Example?2.15.?對會引發(fā)PHP 錯誤的代碼的返回值進行測試

<?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)

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

~~~。

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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號