一、默认情况下,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,如需转载请自行联系原作者