模拟测试和PHP的魔法__get方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模拟测试和PHP的魔法__get方法相关的知识,希望对你有一定的参考价值。

我试图用__get__set方法(使用simpletest)模拟对象时遇到问题。

__get编写模拟响应并没有闻到正确 - 测试似乎与实现紧密相关。任何测试建议,还是我应该完全避免魔术方法?

答案

我有同样的问题,并在SimpleTest测试用例中找到了解决方案:

来自mock_objects_test.php

class ClassWithSpecialMethods {
    function __get($name) { }
    function __set($name, $value) { }
    function __isset($name) { }
    function __unset($name) { }
    function __call($method, $arguments) { }
    function __toString() { }
}
Mock::generate('ClassWithSpecialMethods');

......剪...

function testReturnFromSpecialAccessor() {
    $mock = new MockClassWithSpecialMethods();
    $mock->setReturnValue('__get', '1st Return', array('first'));
    $mock->setReturnValue('__get', '2nd Return', array('second'));
    $this->assertEqual($mock->first, '1st Return');
    $this->assertEqual($mock->second, '2nd Return');
}

function testcanExpectTheSettingOfValue() {
    $mock = new MockClassWithSpecialMethods();
    $mock->expectOnce('__set', array('a', 'A'));
    $mock->a = 'A';
}

有点笨重,但它的工作原理。另一方面,我认为你最好避免它们......我正在研究的大型企业系统大量使用它们,理解/可视化/调试/做任何事情都是一场噩梦!

以上是关于模拟测试和PHP的魔法__get方法的主要内容,如果未能解决你的问题,请参考以下文章

PHP魔法方法的使用

单元测试魔术方法

4-1 减少PHP魔法函数的使用 __get($name)返回私有变量 取执行时间

php性能优化学习笔记

CURL PHP模拟浏览器get和post

PHP魔术方法和魔法变量详解