phpspec - 断言在方法调用期间对象已更改

时间:2014-02-26 21:14:16

标签: rspec phpunit bdd phpspec

如果我有以下方法:

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

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

在方法调用期间,可以更改传递的对象,但该方法不会返回该对象。

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

2 个答案:

答案 0 :(得分:1)

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

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

你的例子并没有真正描述你的问题。如果你给了一个更好的,我们可以提供更好的帮助。

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

答案 1 :(得分:0)

我不知道有一种有效的方法可以在不嘲笑的情况下做到这一点。查看Phake

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

相关问题