2011-12-20 6 views
1

だから私はPHPUnitの縫い目を使用して調査することにしましたが、私は、私はデータベースクラスPHPUnitのと縫い目

db_Class::getMyData($vars); 

への依存関係を壊したように、私のクラスを再配置

問題に出くわしました

self::getMyData($vars); 

になったと私は私のコード

protected static function getMyData($vars) { 
    return db_Class::getMyData($vars); 
} 
に機能を追加しました

これは、このクラスを継承し、getMyData関数をオーバーロードするクラスを作成できるように行われました。テストケースを実行するときに変更できるようにする。

したがって、たとえば上記のクラスを拡張し、その関数をオーバーロードシームクラスに:私が好きなように私は、データを変更できるよう

protected static function getMyData($vars) { 
    return array('id'=>1, 'name'=>"My Name"); 
} 

これは、非常に有用であろう。しかし、PHPUnitを使用する場合は、$ this-> getMockなどを使用してモックを実行する可能性があります。私はシームクラスの中でこれを達成することができるでしょうか?

私は依存性インジェクタを使用していないソリューションを探しています。これは、私の他の選択肢であり、それほど悪くなく、両方の選択肢を評価したいだけです。

A seam is a place where you can alter behavior in your program without editing in that place. 

だから私は、完全な画像を得られない可能性があります、と私はしばらくの間、今それを取得しようとしてきた、と私はちょうどカント:

マイケルC.羽は、以下の対象の継ぎ目を表明しましたその周りに私の頭をしてください。アイデアや質問があればコメントしてください。

私が求めているのは、さまざまなシナリオで簡単にモックを操作する方法です。私はいつも継ぎ目で同じ値を返そうとはしません。時には、エラーを得るためにnullを返すことがあります。時には、正しいデータを持つ配列、時には別のものがあります。

おかげ

答えて

3

静的メソッドを呼び出すときにクラスを直接参照する必要がありますので、あなたが非静的メソッドのように、あなたがそれらをオーバーライドすることはできません。 Static methods make testing difficult.私はそこに書かれていることを繰り返すことを迷惑にならないでしょう。私は答えの中のリンクをたどることを強く勧めます。

いずれにしても、なぜそのメソッドは静的ですか?保護されているので、同じクラスまたはそのサブクラスからのみ呼び出すことができます。あなたは文脈の詳細をここに投稿できますか?あなたはそれをどのように使いたいのですか、それをどこでテストしますか?それを非静的に変更できますか?

+0

を – Oldek