【发布时间】:2018-05-04 21:49:40
【问题描述】:
情景
我正在编写单元测试来测试目前处于开发阶段的 API。我有一个模拟容器类(装饰器模式),其中包含一个模拟数组,将代替对实际对象的调用来执行。
这些模拟容器在测试运行期间被放置在 DI 容器中,并且调用命中容器而不是模型/控制器。在大多数情况下,我们允许控制器功能通过,但我们偶尔想模拟它们。模拟容器通过__call 捕获不可访问的函数调用并返回分配的模拟数据或命中内部对象来运行。
问题
这在以下用例中效果很好:
$this->c['Controller_Name']->functionHere()
由于c['Controller_Name'] 是我们的模拟容器的一个实例,但这种方法的问题来自控制器通过$this->functionHere() 引用自身,而functionHere 应该被模拟,但调用发生在$this 上Controller 的实例,而不是我们的 Mock Container。
是否有一种可行的方法来拦截对类自己成员的调用,所以我可以捕获$this->functionHere() 并将其适当地转换为$this->c['Controller_Name']->functionHere()
【问题讨论】:
标签: php unit-testing decorator encapsulation