在上篇文章中介紹了如何使用PHPUnit進行單元測試,現在我就來談談如何編寫測試用例以及怎樣保證測試的全面性。
通常的測試用例繼承自PHPUnit_Framework_TestCase類,其中的每個測試都以test開頭,而且聲明為公共類型public。每個測試用例都有一個構建方法setUp()和拆除方法tearDown(),分別在每個測試執行之前和之后執行,這兩個方法都聲明為被保護類型protected。測試語句的類型包括斷言、標記跳過、標記未完成。自動生成的測試類使用標記未完成來表示該測試未完成,在測試條件不滿足的情況下要使用標記跳過,如測試Oracle數據庫驅動時沒有Oracle數據庫環境、Linux下無法測試SQL Server數據庫驅動等。測試結果包括成功、失敗和錯誤。出現錯誤的結果說明你的代碼中有語法或運行時錯誤,這些錯誤要首先被解決。
標記未完成
在開始寫測試用例時,我們使用標記跳過來表示測試是未完成的,這樣做和什么都不寫的區別是后者會認為測試是成功的,而你可能會在之后忘了寫測試。
PHP代碼
class UnitTest extends PHPUnit_Framework_TestCase
{
/**
* 測試Hello()方法
*/
public function testHello()
{
$this->markTestIncomplete('這是一個未完成的測試');
}
}
?>
標記跳過
使用標記跳過來跳過不滿足測試條件的情況,避免出現錯誤而影響測試結果。
PHP代碼
class UnitTest extends PHPUnit_Framework_TestCase
{
protected function setUp()
{
// 該測試用例需要xxx擴展,如果不滿足就跳過
if (!extension_loaded('xxx')) {
$this->markTestSkipped('這是一個跳過的測試');
}
}
}
?>
斷言
布爾類型
assertTrue 斷言為真
assertFalse 斷言為假
NULL類型
assertNull 斷言為NULL
assertNotNull 斷言非NULL
數字類型
assertEquals 斷言等于
assertNotEquals 斷言不等于
assertGreaterThan 斷言大于
assertGreaterThanOrEqual 斷言大于等于
assertLessThan 斷言小于
assertLessThanOrEqual 斷言小于等于
字符類型
assertEquals 斷言等于
assertNotEquals 斷言不等于
assertContains 斷言包含
assertNotContains 斷言不包含
assertContainsOnly 斷言只包含
assertNotContainsOnly 斷言不只包含
數組類型
assertEquals 斷言等于
assertNotEquals 斷言不等于
assertArrayHasKey 斷言有鍵
assertArrayNotHasKey 斷言沒有鍵
assertContains 斷言包含
assertNotContains 斷言不包含
assertContainsOnly 斷言只包含
assertNotContainsOnly 斷言不只包含
對象類型
assertAttributeContains 斷言屬性包含
assertAttributeContainsOnly 斷言屬性只包含
assertAttributeEquals 斷言屬性等于
assertAttributeGreaterThan 斷言屬性大于
assertAttributeGreaterThanOrEqual 斷言屬性大于等于
assertAttributeLessThan 斷言屬性小于
assertAttributeLessThanOrEqual 斷言屬性小于等于
assertAttributeNotContains 斷言不包含
assertAttributeNotContainsOnly 斷言屬性不只包含
assertAttributeNotEquals 斷言屬性不等于
assertAttributeNotSame 斷言屬性不相同
assertAttributeSame 斷言屬性相同
assertSame 斷言類型和值都相同
assertNotSame 斷言類型或值不相同
assertObjectHasAttribute 斷言對象有某屬性
assertObjectNotHasAttribute 斷言對象沒有某屬性
class類型
class類型包含對象類型的所有斷言,還有
assertClassHasAttribute 斷言類有某屬性
assertClassHasStaticAttribute 斷言類有某靜態屬性
assertClassNotHasAttribute 斷言類沒有某屬性
assertClassNotHasStaticAttribute 斷言類沒有某靜態屬性
文件相關
assertFileEquals 斷言文件內容等于
原文轉自:http://www.uml.org.cn/Test/200910169.asp