2016-05-25 3 views
1

私はPhpUnitを使用して自分のPHPコードをテストしています。多くの開発者は、クエリメソッドに期待をかけるのは悪い習慣であると言います。これは、何かを返すだけで、システムの状態(CQS)を変更しないメソッドです。期待は、コマンド型のメソッドに対してのみ使用する必要があります。例:PHPunit:疑似クエリ型メソッドで期待通りに呼び出すのは悪い習慣ですか?

$this->validatorMock->expects($this->once()) 
       ->method('isValid') 
       ->with('foo') 
       ->willReturn(true) 

実装にしっかりとテストを結合するので、悪い習慣と考えられます。正しい方法:しかし

$this->validatorMock->method('isValid') 
    ->willReturn(true); 

私は例えば、ある種の検証の結果に依存して、テストクラス:

if ($this->validator->isValid($data) { 
     // some logic 
} else { 
    // some other logic 
}          

だ場合、私はその方法に期待をかけたりすべきではないでしょうか?これはクエリ型のメソッドですが、呼び出されたことをテストすることが重要です。データが検証されたことを知りたい。

もちろんisValidメソッド自体は状態を変更するが、ちょうど入力に基づいて値を返さない関数がたくさんある別々のTestClassを(バリデータクラスをテストする1)に

答えて

-1

をテストしています。検証は1つのタイプであり、変換は別のタイプです。

これらの関数は、破損したくない重要なロジックを含んでいるため、これらの関数を単体テストするのには理にかなっています。私は '多くの開発者'が間違っていると思う。

+0

あなたの答えに感謝しますが、私はあなたが私の質問を理解したとは思わない。私はisValidがテストされるべきかどうかを問わず、別のtestClassでテストされます。私はそのメソッドを嘲笑するときに、私はそのメソッドに期待しているかどうかを尋ねていますか? –

+0

ああ、その場合はそれに依存します。バリデータを呼び出すクラスをテストして、異なる結果を処理する方法を確認する場合は、その結果(実際にはスタブ)を返すモックが必要です。別のテストでは、バリデータがまったく呼び出されているかどうかを知りたければ、特定の結果値は必要ありません。 – GolezTrol

関連する問題