# 附錄?E.?索引
# Index
### Symbols
$backupGlobalsBlacklist, [全局狀態](#)$backupStaticAttributesBlacklist, [全局狀態](#)@author, [命令行選項](#), [@author](#)@backupGlobals, [全局狀態](#), [@backupGlobals](#)@backupStaticAttributes, [全局狀態](#), [@backupStaticAttributes](#)@codeCoverageIgnore, [略過代碼塊](#), [@codeCoverageIgnore*](#)@codeCoverageIgnoreEnd, [略過代碼塊](#), [@codeCoverageIgnore*](#)@codeCoverageIgnoreStart, [略過代碼塊](#), [@codeCoverageIgnore*](#)@covers, [指明要覆蓋的方法](#), [@covers](#)@coversDefaultClass, [@coversDefaultClass](#)@coversNothing, [指明要覆蓋的方法](#), [@coversNothing](#)@dataProvider, [數據供給器](#), [@dataProvider](#)@depends, [測試的依賴關系](#), [數據供給器](#), [@depends](#)@expectedException, [對異常進行測試](#), [@expectedException](#)@expectedExceptionCode, [對異常進行測試](#), [@expectedExceptionCode](#)@expectedExceptionMessage, [對異常進行測試](#), [@expectedExceptionMessage](#)@expectedExceptionMessageRegExp, [對異常進行測試](#), [@expectedExceptionMessageRegExp](#)@group, [命令行選項](#), [@group](#)@large, [@large](#)@medium, [@medium](#)@preserveGlobalState, [@preserveGlobalState](#)@requires, [@requires](#)@runInSeparateProcess, [@runInSeparateProcess](#)@runTestsInSeparateProcesses, [@runTestsInSeparateProcesses](#)@small, [@small](#)@test, [編寫 PHPUnit 測試](#), [@test](#)@testdox, [@testdox](#)@ticket, [@ticket](#)@uses, [@uses](#)變更風險反模式(CRAP)指數(Change Risk Anti-Patterns (CRAP) Index), [用于代碼覆蓋率的軟件衡量標準](#)敏捷文檔, [命令行選項](#), [敏捷文檔](#)測試的依賴關系, [測試的依賴關系](#)
### A
Annotation (標注), [編寫 PHPUnit 測試](#), [測試的依賴關系](#), [數據供給器](#), [對異常進行測試](#), [命令行選項](#), [略過代碼塊](#), [指明要覆蓋的方法](#), [標注](#)anything(), [assertThat()](#)arrayHasKey(), [assertThat()](#)assertArrayHasKey(), [assertArrayHasKey()](#)assertArrayNotHasKey(), [assertArrayHasKey()](#)assertArraySubset(), [assertArraySubset()](#)assertAttributeContains(), [assertContains()](#)assertAttributeContainsOnly(), [assertContainsOnly()](#)assertAttributeEmpty(), [assertEmpty()](#)assertAttributeEquals(), [assertEquals()](#)assertAttributeGreaterThan(), [assertGreaterThan()](#)assertAttributeGreaterThanOrEqual(), [assertGreaterThanOrEqual()](#)assertAttributeInstanceOf(), [assertInstanceOf()](#)assertAttributeInternalType(), [assertInternalType()](#)assertAttributeLessThan(), [assertLessThan()](#)assertAttributeLessThanOrEqual(), [assertLessThanOrEqual()](#)assertAttributeNotContains(), [assertContains()](#)assertAttributeNotContainsOnly(), [assertContainsOnly()](#)assertAttributeNotEmpty(), [assertEmpty()](#)assertAttributeNotEquals(), [assertEquals()](#)assertAttributeNotInstanceOf(), [assertInstanceOf()](#)assertAttributeNotInternalType(), [assertInternalType()](#)assertAttributeNotSame(), [assertSame()](#)assertAttributeSame(), [assertSame()](#)assertClassHasAttribute(), [assertClassHasAttribute()](#)assertClassHasStaticAttribute(), [assertClassHasStaticAttribute()](#)assertClassNotHasAttribute(), [assertClassHasAttribute()](#)assertClassNotHasStaticAttribute(), [assertClassHasStaticAttribute()](#)assertContains(), [assertContains()](#)assertContainsOnly(), [assertContainsOnly()](#)assertContainsOnlyInstancesOf(), [assertContainsOnlyInstancesOf()](#)assertCount(), [assertCount()](#)assertEmpty(), [assertEmpty()](#)assertEquals(), [assertEquals()](#)assertEqualXMLStructure(), [assertEqualXMLStructure()](#)assertFalse(), [assertFalse()](#)assertFileEquals(), [assertFileEquals()](#)assertFileExists(), [assertFileExists()](#)assertFileNotEquals(), [assertFileEquals()](#)assertFileNotExists(), [assertFileExists()](#)assertFinite(), [assertInfinite()](#)assertGreaterThan(), [assertGreaterThan()](#)assertGreaterThanOrEqual(), [assertGreaterThanOrEqual()](#)assertInfinite(), [assertInfinite()](#)assertInstanceOf(), [assertInstanceOf()](#)assertInternalType(), [assertInternalType()](#)assertJsonFileEqualsJsonFile(), [assertJsonFileEqualsJsonFile()](#)assertJsonFileNotEqualsJsonFile(), [assertJsonFileEqualsJsonFile()](#)assertJsonStringEqualsJsonFile(), [assertJsonStringEqualsJsonFile()](#)assertJsonStringEqualsJsonString(), [assertJsonStringEqualsJsonString()](#)assertJsonStringNotEqualsJsonFile(), [assertJsonStringEqualsJsonFile()](#)assertJsonStringNotEqualsJsonString(), [assertJsonStringEqualsJsonString()](#)assertLessThan(), [assertLessThan()](#)assertLessThanOrEqual(), [assertLessThanOrEqual()](#)assertNan(), [assertNan()](#)assertNotContains(), [assertContains()](#)assertNotContainsOnly(), [assertContainsOnly()](#)assertNotCount(), [assertCount()](#)assertNotEmpty(), [assertEmpty()](#)assertNotEquals(), [assertEquals()](#)assertNotInstanceOf(), [assertInstanceOf()](#)assertNotInternalType(), [assertInternalType()](#)assertNotNull(), [assertNull()](#)assertNotRegExp(), [assertRegExp()](#)assertNotSame(), [assertSame()](#)assertNull(), [assertNull()](#)assertObjectHasAttribute(), [assertObjectHasAttribute()](#)assertObjectNotHasAttribute(), [assertObjectHasAttribute()](#)assertPostConditions(), [基境(fixture)](#)assertPreConditions(), [基境(fixture)](#)assertRegExp(), [assertRegExp()](#)assertSame(), [assertSame()](#)assertStringEndsNotWith(), [assertStringEndsWith()](#)assertStringEndsWith(), [assertStringEndsWith()](#)assertStringEqualsFile(), [assertStringEqualsFile()](#)assertStringMatchesFormat(), [assertStringMatchesFormat()](#)assertStringMatchesFormatFile(), [assertStringMatchesFormatFile()](#)assertStringNotEqualsFile(), [assertStringEqualsFile()](#)assertStringNotMatchesFormat(), [assertStringMatchesFormat()](#)assertStringNotMatchesFormatFile(), [assertStringMatchesFormatFile()](#)assertStringStartsNotWith(), [assertStringStartsWith()](#)assertStringStartsWith(), [assertStringStartsWith()](#)assertThat(), [assertThat()](#)assertTrue(), [assertTrue()](#)assertXmlFileEqualsXmlFile(), [assertXmlFileEqualsXmlFile()](#)assertXmlFileNotEqualsXmlFile(), [assertXmlFileEqualsXmlFile()](#)assertXmlStringEqualsXmlFile(), [assertXmlStringEqualsXmlFile()](#)assertXmlStringEqualsXmlString(), [assertXmlStringEqualsXmlString()](#)assertXmlStringNotEqualsXmlFile(), [assertXmlStringEqualsXmlFile()](#)assertXmlStringNotEqualsXmlString(), [assertXmlStringEqualsXmlString()](#)attribute(), [assertThat()](#)attributeEqualTo(), [assertThat()](#)Automated Documentation (自動文檔), [敏捷文檔](#)
### B
Blacklist (黑名單), [為代碼覆蓋率包含或排除文件](#)
### C
classHasAttribute(), [assertThat()](#)classHasStaticAttribute(), [assertThat()](#)Code Coverage (代碼覆蓋率), [命令行選項](#), [代碼覆蓋率分析](#), [@covers](#), [為代碼覆蓋率包含或排除文件](#)Blacklist (黑名單), [包含與排除文件](#)Branch Coverage (分支覆蓋率), [用于代碼覆蓋率的軟件衡量標準](#)Class and Trait Coverage (類與特質覆蓋率), [用于代碼覆蓋率的軟件衡量標準](#)Function and Method Coverage (函數與方法覆蓋率), [用于代碼覆蓋率的軟件衡量標準](#)Line Coverage (行覆蓋率), [用于代碼覆蓋率的軟件衡量標準](#)Opcode Coverage (Opcode 覆蓋率), [用于代碼覆蓋率的軟件衡量標準](#)Path Coverage (路徑覆蓋率), [用于代碼覆蓋率的軟件衡量標準](#)Whitelist (白名單), [包含與排除文件](#)Configuration (配置), [命令行選項](#)Constant (常量), [設定 PHP INI 設置、常量、全局變量](#)contains(), [assertThat()](#)containsOnly(), [assertThat()](#)containsOnlyInstancesOf(), [assertThat()](#)
### D
Data-Driven Tests (數據驅動測試), [實現 PHPUnit_Framework_Test](#)Defect Localization (缺陷定位), [測試的依賴關系](#)Depended-On Component (依賴組件), [測試替身](#)Documenting Assumptions (將假設文檔化), [敏捷文檔](#)
### E
equalTo(), [assertThat()](#)Error Handler (錯誤處理), [對 PHP 錯誤進行測試](#)Error (錯誤), [命令行測試執行器](#)Extreme Programming (極限編程), [敏捷文檔](#)
### F
Failure (失敗), [命令行測試執行器](#)fileExists(), [assertThat()](#)Fixture (基境), [基境(fixture)](#)Fluent Interface (流暢式接口), [Stubs (樁件)](#)
### G
getMock(), [Stubs (樁件)](#)getMockBuilder(), [Stubs (樁件)](#)getMockForAbstractClass(), [對特質(Trait)與抽象類進行模仿](#)getMockForTrait(), [對特質(Trait)與抽象類進行模仿](#)getMockFromWsdl(), [對 Web 服務(Web Services)進行上樁或模仿](#)Global Variable (全局變量), [全局狀態](#), [設定 PHP INI 設置、常量、全局變量](#)greaterThan(), [assertThat()](#)greaterThanOrEqual(), [assertThat()](#)
### H
hasAttribute(), [assertThat()](#)
### I
identicalTo(), [assertThat()](#)include_path, [命令行選項](#)Incomplete Test (未完成的測試), [未完成的測試](#)isFalse(), [assertThat()](#)isInstanceOf(), [assertThat()](#)isNull(), [assertThat()](#)isTrue(), [assertThat()](#)isType(), [assertThat()](#)
### J
JSON, [命令行選項](#)
### L
lessThan(), [assertThat()](#)lessThanOrEqual(), [assertThat()](#)Logfile (日志文件), [命令行選項](#)Logging (日志記錄), [Logging (日志記錄)](#), [Logging (日志記錄)](#)logicalAnd(), [assertThat()](#)logicalNot(), [assertThat()](#)logicalOr(), [assertThat()](#)logicalXor(), [assertThat()](#)
### M
matchesRegularExpression(), [assertThat()](#)method(), [Stubs (樁件)](#)Mock Object (仿件對象), [仿件對象(Mock Object)](#)
### O
onConsecutiveCalls(), [Stubs (樁件)](#)onNotSuccessfulTest(), [基境(fixture)](#)
### P
PHP Error (PHP 錯誤), [對 PHP 錯誤進行測試](#)PHP Notice (PHP 通知), [對 PHP 錯誤進行測試](#)PHP Warning (PHP 警告), [對 PHP 錯誤進行測試](#)php.ini, [設定 PHP INI 設置、常量、全局變量](#)PHPUnit_Extensions_RepeatedTest, [從 PHPUnit_Extensions_TestDecorator 派生子類](#)PHPUnit_Extensions_TestDecorator, [從 PHPUnit_Extensions_TestDecorator 派生子類](#)PHPUnit_Framework_BaseTestListener, [實現 PHPUnit_Framework_TestListener](#)PHPUnit_Framework_Error, [對 PHP 錯誤進行測試](#)PHPUnit_Framework_Error_Notice, [對 PHP 錯誤進行測試](#)PHPUnit_Framework_Error_Warning, [對 PHP 錯誤進行測試](#)PHPUnit_Framework_IncompleteTest, [未完成的測試](#)PHPUnit_Framework_IncompleteTestError, [未完成的測試](#)PHPUnit_Framework_Test, [實現 PHPUnit_Framework_Test](#)PHPUnit_Framework_TestCase, [編寫 PHPUnit 測試](#), [從 PHPUnit_Framework_TestCase 派生子類](#)PHPUnit_Framework_TestListener, [命令行選項](#), [實現 PHPUnit_Framework_TestListener](#), [測試監聽器](#)PHPUnit_Runner_TestSuiteLoader, [命令行選項](#)PHPUnit_Util_Printer, [命令行選項](#)PHP_Invoker, [@large](#), [@medium](#), [@small](#)Process Isolation (進程隔離), [命令行選項](#)
### R
Refactoring (重構), [在開發過程中](#)Report (報告), [命令行選項](#)returnArgument(), [Stubs (樁件)](#)returnCallback(), [Stubs (樁件)](#)returnSelf(), [Stubs (樁件)](#)returnValueMap(), [Stubs (樁件)](#)
### S
Selenium RC, [為 Selenium RC 配置瀏覽器](#)setUp(), [基境(fixture)](#)setUpBeforeClass, [基境共享](#)setUpBeforeClass(), [基境(fixture)](#)stringContains(), [assertThat()](#)stringEndsWith(), [assertThat()](#)stringStartsWith(), [assertThat()](#)Stub (樁件), [Stubs (樁件)](#)Stubs (樁件), [跨團隊測試](#)System Under Test (被測系統), [測試替身](#)
### T
tearDown(), [基境(fixture)](#)tearDownAfterClass, [基境共享](#)tearDownAfterClass(), [基境(fixture)](#)Template Method (模板方法), [基境(fixture)](#)Test Double (測試替身), [測試替身](#)Test Groups (測試分組), [命令行選項](#), [分組](#)Test Isolation (測試隔離), [命令行選項](#), [全局狀態](#)Test Listener (測試監聽器), [測試監聽器](#)Test Suite (測試套件), [組織測試](#), [測試套件](#)TestDox, [敏捷文檔](#), [@testdox](#)throwException(), [Stubs (樁件)](#)timeoutForLargeTests, [@large](#)timeoutForMediumTests, [@medium](#)timeoutForSmallTests, [@small](#)
### W
Whitelist (白名單), [為代碼覆蓋率包含或排除文件](#)will(), [Stubs (樁件)](#)willReturn(), [Stubs (樁件)](#)
### X
Xdebug, [代碼覆蓋率分析](#)XML Configuration (XML 配置), [用 XML 配置來編排測試套件](#)
- PHPUnit 手冊
- 1. 安裝 PHPUnit
- 需求
- PHP 檔案包 (PHAR)
- Composer
- 可選的組件包
- 2. 編寫 PHPUnit 測試
- 測試的依賴關系
- 數據供給器
- 對異常進行測試
- 對 PHP 錯誤進行測試
- 對輸出進行測試
- 錯誤相關信息的輸出
- 3. 命令行測試執行器
- 命令行選項
- 4. 基境(fixture)
- setUp() 多 tearDown() 少
- 變體
- 基境共享
- 全局狀態
- 5. 組織測試
- 用文件系統來編排測試套件
- 用 XML 配置來編排測試套件
- 6. 有風險的測試
- 無用測試
- 意外的代碼覆蓋
- 測試執行期間產生的輸出
- 測試執行時長的超時限制
- 全局狀態篡改
- 7. 未完成的測試與跳過的測試
- 未完成的測試
- 跳過測試
- 用 @requires 來跳過測試
- 8. 數據庫測試
- 數據庫測試所支持的供應商
- 數據庫測試的難點
- 數據庫測試的四個階段
- PHPUnit 數據庫測試用例的配置
- 理解 DataSet(數據集)和 DataTable(數據表)
- 數據庫連接 API
- 數據庫斷言 API
- 常見問題(FAQ)
- 9. 測試替身
- Stubs (樁件)
- 仿件對象(Mock Object)
- Prophecy
- 對特質(Trait)與抽象類進行模仿
- 對 Web 服務(Web Services)進行上樁或模仿
- 對文件系統進行模仿
- 10. 測試實踐
- 在開發過程中
- 在調試過程中
- 11. 代碼覆蓋率分析
- 用于代碼覆蓋率的軟件衡量標準
- 包含與排除文件
- 略過代碼塊
- 指明要覆蓋的方法
- 邊緣情況
- 12. 測試的其他用途
- 敏捷文檔
- 跨團隊測試
- 13. Logging (日志記錄)
- 測試結果 (XML)
- 測試結果 (TAP)
- 測試結果 (JSON)
- 代碼覆蓋率 (XML)
- 代碼覆蓋率 (TEXT)
- 14. 擴展 PHPUnit
- 從 PHPUnit_Framework_TestCase 派生子類
- 編寫自定義斷言
- 實現 PHPUnit_Framework_TestListener
- 從 PHPUnit_Extensions_TestDecorator 派生子類
- 實現 PHPUnit_Framework_Test
- A. 斷言
- assertArrayHasKey()
- assertClassHasAttribute()
- assertArraySubset()
- assertClassHasStaticAttribute()
- assertContains()
- assertContainsOnly()
- assertContainsOnlyInstancesOf()
- assertCount()
- assertEmpty()
- assertEqualXMLStructure()
- assertEquals()
- assertFalse()
- assertFileEquals()
- assertFileExists()
- assertGreaterThan()
- assertGreaterThanOrEqual()
- assertInfinite()
- assertInstanceOf()
- assertInternalType()
- assertJsonFileEqualsJsonFile()
- assertJsonStringEqualsJsonFile()
- assertJsonStringEqualsJsonString()
- assertLessThan()
- assertLessThanOrEqual()
- assertNan()
- assertNull()
- assertObjectHasAttribute()
- assertRegExp()
- assertStringMatchesFormat()
- assertStringMatchesFormatFile()
- assertSame()
- assertStringEndsWith()
- assertStringEqualsFile()
- assertStringStartsWith()
- assertThat()
- assertTrue()
- assertXmlFileEqualsXmlFile()
- assertXmlStringEqualsXmlFile()
- assertXmlStringEqualsXmlString()
- B. 標注
- @author
- @after
- @afterClass
- @backupGlobals
- @backupStaticAttributes
- @before
- @beforeClass
- @codeCoverageIgnore*
- @covers
- @coversDefaultClass
- @coversNothing
- @dataProvider
- @depends
- @expectedException
- @expectedExceptionCode
- @expectedExceptionMessage
- @expectedExceptionMessageRegExp
- @group
- @large
- @medium
- @preserveGlobalState
- @requires
- @runTestsInSeparateProcesses
- @runInSeparateProcess
- @small
- @test
- @testdox
- @ticket
- @uses
- C. XML 配置文件
- PHPUnit
- 測試套件
- 分組
- 為代碼覆蓋率包含或排除文件
- Logging (日志記錄)
- 測試監聽器
- 設定 PHP INI 設置、常量、全局變量
- 為 Selenium RC 配置瀏覽器
- D. 升級
- E. 索引
- F. 參考書目
- G. 版權