如果我有以下方法:
function changeObject($object) {
$object = new \stdClass();
}
这是一个非常愚蠢的例子,但它是用来说明我的问题的。
传递的对象在方法调用过程中可能会发生变化,但方法不会返回对象。
使用 phpspec 如何断言对象已被修改?
幸运的是,这在 PhpSpec 和任何其他测试框架中都不容易。对象在 PHP 中通过引用传递。如果您更改引用,您将不再拥有可以比较的对象。您必须复制原始对象并根据其属性进行比较。不是一个好主意。
修改其参数的方法通常是一种不好的做法,至少是一个坏主意。通常该方法的客户不期望修改。我宁愿考虑如何更好地设计你的课程。
您的示例并不能很好地描述您的问题。如果你给了一个更好的,我们可以提供更好的帮助。
如果您只想验证是否在对象上调用了方法(而不是更改示例中的引用),请使用模拟。
我不知道有没有嘲笑的有效方法。看看Phake。
Phake 是一个模拟框架,允许您在测试中模拟对象,并验证它们调用某些方法,或强制它们在测试中返回某些输出。