单元测试魔术方法
Posted
技术标签:
【中文标题】单元测试魔术方法【英文标题】:Unit Testing Magic Methods 【发布时间】:2012-10-20 08:43:40 【问题描述】:当涉及到 php 中魔法方法的单元测试实现时,调用这些方法的推荐方法是什么?
我看到三个可用选项:
显式/直接调用它们:
$object->__get('someValue');
间接调用它们(使用旨在触发它们的任何操作):
$object->someValue; \\ Where __get() is implemented.
使用这两种方法调用它们。
是否有任何单元测试老手可以解释哪个(如果有)是显而易见的选择,以及为什么会这样?
(这可能接近主观/辩论领域,但我会问,希望在处理这个问题时我应该考虑一些普遍接受的原则。)
【问题讨论】:
我不是专家,但似乎第一个会导致更好的(自我)记录测试。 【参考方案1】:您应该测试可观察的行为。所以,第二个 ($obj->property
)必须进行测试,毫无疑问。
至于实际直接调用 getter,那更像是一个判断调用。一旦你说过__get('someProperty')
,在我看来你几乎已经确定它是一个神奇的属性。由于我尝试从不更改测试,如果出于某种原因,我希望它成为一个普通的旧非魔法属性,这会使事情变得相当复杂。从好的方面来说,您也可以调用 getter 并以另一种方式获取属性,并确保它们都具有完全相同的结果。
【讨论】:
以上是关于单元测试魔术方法的主要内容,如果未能解决你的问题,请参考以下文章