代码之家  ›  专栏  ›  技术社区  ›  Ken

模拟测试和PHP的魔力获取方法

  •  4
  • Ken  · 技术社区  · 16 年前

    当我试图用 __get __set 方法(使用) simpletest )

    为…写模拟回答 使得到 闻起来不太对劲-测试似乎与实现紧密相连。有什么关于测试的建议吗,或者我应该完全避免使用魔法方法吗?

    1 回复  |  直到 6 年前
        1
  •  3
  •   penfold    16 年前

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

    从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';
    }
    

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