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