单元测试魔术方法

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 并以另一种方式获取属性,并确保它们都具有完全相同的结果。

【讨论】:

以上是关于单元测试魔术方法的主要内容,如果未能解决你的问题,请参考以下文章

php魔术方法。。

PHP面向对象的魔术方法

php啥是魔术方法

PHP的魔术常量和魔术方法

php 魔术方法 和 魔术常量

php 魔术方法和魔术常量