单元测试魔术方法

时间:2012-10-30 22:44:21

标签: php unit-testing phpunit

在PHP中对魔术方法的单元测试实现时,调用这些方法的推荐方法是什么?

我看到三个选项:

  • 明确/直接调用它们:

    $object->__get('someValue');

  • 间接调用它们(使用任何旨在触发它们的动作):

    $object->someValue; \\ Where __get() is implemented.

  • 使用这两种方法调用它们。

是否有任何单位测试老手可以解释哪些(如果有的话)是明显的选择,以及为什么会这样?

(这可能会接近主观/辩论领域,但我希望在接近这个问题时我应该考虑一些普遍接受的原则。)

1 个答案:

答案 0 :(得分:6)

您应该测试可观察行为。因此,第二个($obj->property必须进行测试,毫无疑问。

至于直接实际调用getter,这更像是一个判断调用。一旦你说__get('someProperty'),在我看来,你几乎已经确定它是一个神奇的财产。因为我试图永远不会改变测试,如果由于某种原因,我希望它是一个普通的非魔法属性,这会使事情变得复杂。从好的方面来说,你可以调用getter并以其他方式获取属性,并确保它们都具有完全相同的结果。