单元测试PHP中多个类的对象状态更改

时间:2014-10-29 18:14:46

标签: php unit-testing pass-by-reference

场景:我有一个值对象,它通过引用传递给几个对象(在本例中为事件侦听器),并在其中一个对象中修改其状态。在触发事件侦听器之后,还有另一个调用将对象保存到具有新状态的数据存储。通过使事件侦听器不直接使用值对象来解决此问题。

问题:如何编写回归单元测试以检查在保存发生时是否修改了值对象?

示例:

public function someControllerAction() {
    $value = new \stdClass();
    $value->property = 'awesome';
    $value->type = 'test';

    $obj->method($value);
    $otherObj-> methodChangesStateButShouldNot($value); // If this method is bad it will change the state of value

// Value needs to be the same state as when it was created
    $db->save($value);
}

1 个答案:

答案 0 :(得分:1)

如果您的意思是methodChangesStateButShouldNot(),那么我认为您不应该在此进行测试。如果$otherObj不应该更改$value那么另一个object::method中的测试必须确保输入和输出相同。在这里测试这意味着创建一个真实的$otherObj实例,而不是假的,然后可能更多的上下文,这不是单元测试的重点,是吗。

如果$otherObj::methodChangesState是一种静态方法,你可能敢于这样做。只需克隆$value,然后断言$value之前和之后相等。