/** * The new mock class code in string form. * @param $class Class to replicate. * @param $mock_class New class name. * @static * @access private */ function _createClassCode($class, $mock_class) { $mock_base = Mock::setMockBaseClass(); $code = "class {$mock_class} extends {$mock_base} {\n"; $code .= " function {$mock_class}(&\$test, \$wildcard = MOCK_WILDCARD) {\n"; $code .= " \$this->{$mock_base}(\$test, \$wildcard);\n"; $code .= " \$args = func_get_args();\n"; $code .= " \$this->_mockMethod(\"{$class}\", \$args);\n"; $code .= " }\n"; foreach (get_class_methods($class) as $method) { $code .= " function {$method}() {\n"; $code .= " \$args = func_get_args();\n"; $code .= " return \$this->_mockMethod(\"{$method}\", \$args);\n"; $code .= " }\n"; } $code .= "}\n"; return $code; }
function aMethod() { } } Mock::generate("Dummy"); Mock::generate("Dummy", "AnotherMockDummy"); class SpecialSimpleMock extends SimpleMock { function SpecialSimpleMock(&$test, $wildcard) { $this->SimpleMock($test, $wildcard); } } Mock::setMockBaseClass("SpecialSimpleMock"); Mock::generate("Dummy", "SpecialMockDummy"); Mock::setMockBaseClass("SimpleMock"); class TestOfCodeGeneration extends UnitTestCase { function TestOfCodeGeneration() { $this->UnitTestCase(); } function testCloning() { $mock =& new MockDummy($this); $this->assertTrue(method_exists($mock, "aMethod")); $this->assertNull($mock->aMethod()); } function testCloningWithChosenClassName() { $mock =& new AnotherMockDummy($this);