一、預設情況下,PHPUnit 將測試在執行中觸發的 PHP 錯誤、警告、通知都轉換為異常,所以在這樣的情況下,單元測試就會終止。當程式不能保證沒有Notice時,又想單元測試可以順利執行的話,可以修改設定檔phpunit.xml
<phpunit backupGlobals="true" backupStaticAttributes="false" cacheTokens="false" colors="false" convertErrorsToExceptions="true" convertNoticesToExceptions="true" convertWarningsToExceptions="true" forceCoversAnnotation="false" mapTestClassNameToCoveredClassName="false" printerClass="PHPUnit_TextUI_ResultPrinter" processIsolation="false" stopOnError="false" stopOnFailure="false" stopOnIncomplete="false" stopOnSkipped="false" testSuiteLoaderClass="PHPUnit_Runner_StandardTestSuiteLoader" timeoutForSmallTests="1" timeoutForMediumTests="10" timeoutForLargeTests="60" strict="false" verbose="false"></phpunit>
將convertNoticesToExceptions設為false可以禁用此功能,還有convertWarningsToExceptions
這些選項都是在命令列選項裡無法修改的,當執行的時候可以使用phpunit -c phpunit.xml來指定配置選項。
二、
對 PHP 錯誤進行測試
<?phpclass ExpectedErrorTest extends PHPUnit_Framework_TestCase{ /** * @expectedException PHPUnit_Framework_Error */ public function testFailingInclude() { include 'not_existing_file.php'; }}?>
執行結果
phpunit -d error_reporting=2 ExpectedErrorTestPHPUnit 3.8.0 by Sebastian Bergmann..Time: 0 seconds, Memory: 5.25MbOK (1 test, 1 assertion)
注意
PHP 的error_reporting運行時配置會對 PHPUnit 將哪些錯誤轉換為異常有所限制。如果在這個特性上碰到問題,請確認 PHP 的配置中沒有抑制想要測試的錯誤類型。
三、對異常進行測試
<?phpclass ExceptionTest extends PHPUnit_Framework_TestCase { public function testException() { try { // ... 預期會引發異常的代碼 ... } catch (InvalidArgumentException $expected) { return; } $this->fail('預期的異常未出現。'); }}?>
當預期會引發異常的代碼並沒有引發異常時,後面對fail()的調用將會中止測試,並通告測試有問題。如果預期的異常出現了,將執行catch代碼塊,測試將會成功結束。
本文出自 “phper” 部落格,請務必保留此出處http://janephp.blog.51cto.com/4439680/1300198