W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
默認情況下,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_Notice
和 PHPUnit_Framework_Error_Warning
分別代表 PHP 通知與 PHP 警告。
Note
對異常進行測試是越明確越好的。對太籠統(tǒng)的類進行測試有可能導致不良副作用。因此,不再允許用
@expectedException
或setExpectedException()
對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
~~~。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: