# assertThat()
可以用 `PHPUnit_Framework_Constraint` 類來訂立更加復雜的斷言。隨后可以用 `assertThat()` 方法來評定這些斷言。[Example?A.42, “assertThat() 的用法”](# "Example?A.42.?assertThat() 的用法") 展示了如何用 `logicalNot()` 和 `equalTo()` 約束條件來表達與 `assertNotEquals()` 等價的斷言。
>[info] ## assertThat(mixed $value, PHPUnit_Framework_Constraint $constraint[, $message = ''])
當 `$value` 不符合約束條件 `$constraint` 時報告錯誤,錯誤訊息由 `$message` 指定。
**Example?A.42.?assertThat() 的用法**
~~~
<?php
class BiscuitTest extends PHPUnit_Framework_TestCase
{
public function testEquals()
{
$theBiscuit = new Biscuit('Ginger');
$myBiscuit = new Biscuit('Ginger');
$this->assertThat(
$theBiscuit,
$this->logicalNot(
$this->equalTo($myBiscuit)
)
);
}
}
?>
~~~
[Table?A.1, “約束條件”](# "Table?A.1.?約束條件")列舉了所有可用的 `PHPUnit_Framework_Constraint` 類。
**Table?A.1.?約束條件**
| 約束條件 | 含義 |
|-----|-----|
| `PHPUnit_Framework_Constraint_Attribute attribute(PHPUnit_Framework_Constraint $constraint, $attributeName)` | 此約束將另外一個約束應用于某個類或對象的某個屬性。 |
| `PHPUnit_Framework_Constraint_IsAnything anything()` | 此約束接受任意輸入值。 |
| `PHPUnit_Framework_Constraint_ArrayHasKey arrayHasKey(mixed $key)` | 此約束斷言所評定的數組擁有指定鍵名。 |
| `PHPUnit_Framework_Constraint_TraversableContains contains(mixed $value)` | 此約束斷言所評定的 `array` 或實現了 `Iterator` 接口的對象包含有給定值。 |
| `PHPUnit_Framework_Constraint_TraversableContainsOnly containsOnly(string $type)` | 此約束斷言所評定的 `array` 或實現了 `Iterator` 接口的對象僅包含給定類型的值。 |
| `PHPUnit_Framework_Constraint_TraversableContainsOnly containsOnlyInstancesOf(string $classname)` | 此約束斷言所評定的 `array` 或實現了 `Iterator` 接口的對象僅包含給定類名的類的實例。 |
| `PHPUnit_Framework_Constraint_IsEqual equalTo($value, $delta = 0, $maxDepth = 10)` | 此約束檢驗一個值是否等于另外一個。 |
| `PHPUnit_Framework_Constraint_Attribute attributeEqualTo($attributeName, $value, $delta = 0, $maxDepth = 10)` | 此約束檢驗一個值是否等于某個類或對象的某個屬性。 |
| `PHPUnit_Framework_Constraint_FileExists fileExists()` | 此約束檢驗所評定的文件名對應的文件是否存在。 |
| `PHPUnit_Framework_Constraint_GreaterThan greaterThan(mixed $value)` | 此約束斷言所評定的值大于給定值。 |
| `PHPUnit_Framework_Constraint_Or greaterThanOrEqual(mixed $value)` | 此約束斷言所評定的值大于或等于給定值。 |
| `PHPUnit_Framework_Constraint_ClassHasAttribute classHasAttribute(string $attributeName)` | 此約束斷言所評定的類具有給定屬性。 |
| `PHPUnit_Framework_Constraint_ClassHasStaticAttribute classHasStaticAttribute(string $attributeName)` | 此約束斷言所評定的類具有給定靜態屬性。 |
| `PHPUnit_Framework_Constraint_ObjectHasAttribute hasAttribute(string $attributeName)` | 此約束斷言所評定的對象具有給定屬性。 |
| `PHPUnit_Framework_Constraint_IsIdentical identicalTo(mixed $value)` | 此約束斷言所評定的值與另外一個值全等。 |
| `PHPUnit_Framework_Constraint_IsFalse isFalse()` | 此約束斷言所評定的值為 `FALSE`。 |
| `PHPUnit_Framework_Constraint_IsInstanceOf isInstanceOf(string $className)` | 此約束斷言所評定的對象是給定類的實例。 |
| `PHPUnit_Framework_Constraint_IsNull isNull()` | 此約束斷言所評定的值為 `NULL`。 |
| `PHPUnit_Framework_Constraint_IsTrue isTrue()` | 此約束斷言所評定的值為 `TRUE`。 |
| `PHPUnit_Framework_Constraint_IsType isType(string $type)` | 此約束斷言所評定的值是指定類型的。 |
| `PHPUnit_Framework_Constraint_LessThan lessThan(mixed $value)` | 此約束斷言所評定的值小于給定值。 |
| `PHPUnit_Framework_Constraint_Or lessThanOrEqual(mixed $value)` | 此約束斷言所評定的值小于或等于給定值。 |
| `logicalAnd()` | 邏輯與(AND)。 |
| `logicalNot(PHPUnit_Framework_Constraint $constraint)` | 邏輯非(NOT)。 |
| `logicalOr()` | 邏輯或(OR)。 |
| `logicalXor()` | 邏輯異或(XOR)。 |
| `PHPUnit_Framework_Constraint_PCREMatch matchesRegularExpression(string $pattern)` | 此約束斷言所評定的字符串匹配于正則表達式。 |
| `PHPUnit_Framework_Constraint_StringContains stringContains(string $string, bool $case)` | 此約束斷言所評定的字符串包含指定字符串。 |
| `PHPUnit_Framework_Constraint_StringEndsWith stringEndsWith(string $suffix)` | 此約束斷言所評定的字符串以給定后綴結尾。 |
| `PHPUnit_Framework_Constraint_StringStartsWith stringStartsWith(string $prefix)` | 此約束斷言所評定的字符串以給定前綴開頭。 |
- 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. 版權