在PHP中对魔术方法的单元测试实现时,调用这些方法的推荐方法是什么?
我看到三个选项:
明确/直接调用它们:
$object->__get('someValue');
间接调用它们(使用任何旨在触发它们的动作):
$object->someValue; \\ Where __get() is implemented.
使用这两种方法调用它们。
是否有任何单位测试老手可以解释哪些(如果有的话)是明显的选择,以及为什么会这样?
(这可能会接近主观/辩论领域,但我希望在接近这个问题时我应该考虑一些普遍接受的原则。)
答案 0 :(得分:6)
您应该测试可观察行为。因此,第二个($obj->property
)必须进行测试,毫无疑问。
至于直接实际调用getter,这更像是一个判断调用。一旦你说__get('someProperty')
,在我看来,你几乎已经确定它是一个神奇的财产。因为我试图永远不会改变测试,如果由于某种原因,我希望它是一个普通的非魔法属性,这会使事情变得复杂。从好的方面来说,你可以调用getter并以其他方式获取属性,并确保它们都具有完全相同的结果。