# 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. 版权