Sylph:PHPixieの作成者によるテスト用のディープスタブ、または配列をクラスに変換する方法

ユニットテストシルフ

単体テストを記述するときに最も必要なことの1つは、テスト対象のクラスで使用されるオブジェクトのモックとスタブを作成することです。 重要な違いはここで言及する価値があります。「モック」が1つ以上のメソッドが置き換えられるソースオブジェクトである場合、「スタブ」は元のオブジェクトを完全に置き換える何らかの偽物です。 シナリオによっては、適切なモックを作成するよりもスタブを作成する方がはるかに簡単な場合があります。 この記事では、 PHPixieフレームワークの作成者による小さなSylphクラスを使用して、スタブを効率的かつ迅速に作成する方法を示します。





テストされるメソッドがオブジェクトのディープバッキングを使用する場合があります。たとえば、

class Fairy{ public $name; protected $home_tree; public function __construct($name, $home_tree){ $this->name = $name; $this->home_tree = $home_tree; } //           //      public function get_friends(){ $friends = $this->home_tree->num_squirrels; $friends += $this->home_tree->forest->num_animals('bunny')); return $friends; }
      
      







このようなクラスのテストを作成する場合、TreeクラスとForestクラスを消去し、それらを相互にバインドして、コンストラクターに渡す必要があります。 そして、すべて1つの関数を呼び出すためです。



Sylphは、単純な関連配列と匿名関数を使用して、これを非常に簡単にします。 この場合、$ home_treeを次のように記述できます。



 $sylph = new \PHPixie\Sylph(); $home_tree = $sylph->cast(array( 'num_squirrels' => 5, 'forest' => $sylph->cast(array( 'num_animals' => function($animal){ if($animal == 'bunny') return 4; throw new \Exception('Animal not found'); } )) ));
      
      







このアプローチには、いくつかの利点があります。まず第一に、読みやすさと簡潔さです。

ところで、匿名関数を使用すると、非常に興味深い操作を実行できます。たとえば、パラメータをその場で変更できます。



 $num_bunnies = 5; $bunnies = $sylph->cast(array( 'add' => function($new) use($num_bunnies){ return $new + $num_bunnies; } )); $bunnies->add(1); // 6 $bunnies->add(2); // 7 $num_bunnies = 2; $bunnies->add(1); // 3 $bunnies->add(2); // 4
      
      







いつものように、PHPixie開発者は問題の最も簡単な解決策を見つけようとします。



All Articles