0

如果我有以下方法:

function changeObject($object) {
    $object = new \stdClass();
}

这是一个非常愚蠢的例子,但它是用来说明我的问题的。

传递的对象在方法调用过程中可能会发生变化,但方法不会返回对象。

使用 phpspec 如何断言对象已被修改?

4

2 回答 2

1

幸运的是,这在 PhpSpec 和任何其他测试框架中都不容易。对象在 PHP 中通过引用传递。如果您更改引用,您将不再拥有可以比较的对象。您必须复制原始对象并根据其属性进行比较。不是一个好主意。

修改其参数的方法通常是一种不好的做法,至少是一个坏主意。通常该方法的客户不期望修改。我宁愿考虑如何更好地设计你的课程。

您的示例并不能很好地描述您的问题。如果你给了一个更好的,我们可以提供更好的帮助。

如果您只想验证是否在对象上调用了方法(而不是更改示例中的引用),请使用模拟。

于 2014-02-26T23:13:41.240 回答
0

我不知道有没有嘲笑的有效方法。看看Phake

Phake 是一个模拟框架,允许您在测试中模拟对象,并验证它们调用某些方法,或强制它们在测试中返回某些输出。

于 2014-02-26T21:29:52.477 回答