天天看点

phpunit 一些小发现

一、默认情况下,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>&lt;</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>&gt;</code>

<code>&lt;/</code><code>phpunit</code><code>&gt;</code>

将convertNoticesToExceptions设为false可以禁用此功能,还有convertWarningsToExceptions

这些选项都是在命令行选项里无法修改的,当执行的时候可以使用phpunit-cphpunit.xml来指定配置选项。

<code>二、</code>对PHP错误进行测试

<code>&lt;?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>?&gt;</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>-&gt;fail(</code><code>'预期的异常未出现。'</code><code>);</code>

当预期会引发异常的代码并没有引发异常时,后面对fail()的调用将会中止测试,并通告测试有问题。如果预期的异常出现了,将执行catch代码块,测试将会成功结束。

本文转自shayang8851CTO博客,原文链接:http://blog.51cto.com/janephp/1300198,如需转载请自行联系原作者