静的クラス名をコンストラクタ パラメータとして渡す
リファクタリングされたコード:
class SomeModule {
protected $factoryName;
public function __construct($factoryName = 'FooFactory') {
$this->factoryName = $factoryName;
}
public function processFoo()
{
// PHP Parser limitation requires this
$factoryName = $this->factoryName;
$foo = $factoryName::getFoo();
$foo['hoopla'] = 'doo';
return $foo;
}
}
テストコード:
public class MockFactory {
static public function getFoo() {
return array('woo' => 'yay');
}
}
function testSomeModule() {
$module = new SomeModule('MockFactory');
$result = $module->processFoo();
$this->assertEquals('yay', $result['woo']);
$this->assertEquals('doo', $result['hoopla']);
}