1

モジュールオブジェクトの束のコンテナであるクラスがあります。現在、コンテナーはファイル パスの配列を受け取り、ファイルを含めてモジュールをインスタンス化します。

class module {
    function execute();
}

class container {
    public $Name;
    public $Modules;

    public __construct($Obj){
      $this->Name = $Obj->Name;
      foreach($this->Modules as $M){
          include_once($M);
          $className = $this->GetClassName($M);
          $this->Modules[] = new $className;
      }
    }

    public execute(){
      foreach($this->Modules as $M){
          $M->execute();
      }
    }
}

これを簡単にテストできるようにリファクタリングする最善の方法が何であるかはわかりません。

class containerFactory{
    public function createContainer($Obj){
        $C = new Container($Obj);
        $C->InstiateModules();
        return $C;
    }
}
class container{
    public function InstiateModules(){
        $tmp = array();
        foreach($this->Modules as $M){
            include_once($M);
            $className = $this->GetClassName($M);
            `enter code here`$this->Modules[] = new $className;
        }
        $this->Modules = $tmp;
    }
    public function __construct($Obj){
        $this->Name = $Obj->Name;
        $this->Modules = $Obj->Modules;
    }
}

他に何をすべきかについての提案はありますか?ありがとう

4

1 に答える 1

2

できることは 2 つあります。

  1. コードをそのままにして、そのオブジェクトが本来の動作を実際に行うかどうかをテストします。これを行うには、既知の配列をコンストラクターに渡し、それらのファイルが実際にインクルードされ、それらのモジュールが実際にインポートされたことをテストします。私はPHPに詳しくありませんが、ファイルがインポートされたかどうか、モジュールが初期化されたかどうかを確認する方法があると思います。

  2. 上記のメソッドが利用できない場合は、不確実性のフットプリントを削減できます...これを行うには、インポートアクションと初期化アクションを別のクラスに配置し、このクラスがインポーターとイニシャライザーを正しく呼び出していることをテストしますそれらを解析した後の各ファイルについて。インポーターとイニシャライザーのモック/スタブが必要になります。

于 2009-07-04T18:18:31.460 に答える