phpunit一些小發現

技術小美發表於2017-11-16

一、預設情況下,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
<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-cphpunit.xml來指定配置選項。


二、對PHP錯誤進行測試


1
2
3
4
5
6
7
8
9
10
11
12
<?php
class ExpectedErrorTest extends PHPUnit_Framework_TestCase
{
/**
* @expectedException PHPUnit_Framework_Error
*/
public function testFailingInclude()
{
include `not_existing_file.php`;
}
}
?>

執行結果

1
2
3
4
5
phpunit -d error_reporting=2 ExpectedErrorTest
PHPUnit 3.8.0 by Sebastian Bergmann.
.
Time: 0 seconds, Memory: 5.25Mb
OK (1 test, 1 assertion)


注意

PHP的error_reporting執行時配置會對PHPUnit將哪些錯誤轉換為異常有所限制。如果在這個特性上碰到問題,請確認PHP的配置中沒有抑制想要測試的錯誤型別。


三、對異常進行測試

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
class ExceptionTest extends PHPUnit_Framework_TestCase {
public function testException() {
try {
// ... 預期會引發異常的程式碼 ...
}
 
catch (InvalidArgumentException $expected) {
return;
}
 
$this->fail(`預期的異常未出現。`);
}
}
?>

當預期會引發異常的程式碼並沒有引發異常時,後面對fail()的呼叫將會中止測試,並通告測試有問題。如果預期的異常出現了,將執行catch程式碼塊,測試將會成功結束。

本文轉自shayang8851CTO部落格,原文連結:http://blog.51cto.com/janephp/1300198,如需轉載請自行聯絡原作者


相關文章