Prophecy
最后更新于:2022-04-01 03:45:54
# Prophecy
[Prophecy](https://github.com/phpspec/prophecy) 是个“极为自我却又非常强大且灵活的 PHP 对象模仿框架。虽然一开始是为了满足 phpspec2 的需要而建立的,但它足够灵活,可以用最小代价用于任何测试框架内。”
从版本 4.5 开始,PHPUnit 为用 Prophecy 建立测试替身提供了内建支持。[Example 9.17, “测试某个方法会以特定参数被调用一次”](# "Example 9.17. 测试某个方法会以特定参数被调用一次")展示了[Example 9.11, “测试某个方法会以特定参数被调用一次”](# "Example 9.11. 测试某个方法会以特定参数被调用一次")中展示的测试应该如何用 Prophecy 的的预言式理念方式来达到同样的效果:
**Example 9.17. 测试某个方法会以特定参数被调用一次**
~~~
<?php
class SubjectTest extends PHPUnit_Framework_TestCase
{
public function testObserversAreUpdated()
{
$subject = new Subject('My subject');
// 为 Observer 类建立预言(prophecy)。
$observer = $this->prophesize('Observer');
// 建立预期状况:update() 方法将会被调用一次,
// 并且将以字符串 'something' 为参数。
$observer->update('something')->shouldBeCalled();
// 揭示预言,并将仿件对象链接到主体上。
$subject->attach($observer->reveal());
// 在 $subject 对象上调用 doSomething() 方法,
// 预期将以字符串 'something' 为参数调用
// Observer 仿件对象的 update() 方法。
$subject->doSomething();
}
}
?>
~~~
更多关于如何用这个测试替身框架来创建、配置及使用桩件、谍件、仿件的细节,请参考 Prophecy 的 [文档](https://github.com/phpspec/prophecy#how-to-use-it)。