2009-03-13 5 views
3

実際に電子メールを送信することから電子メールを送信するメソッドを停止しようとしています。モックオブジェクト(またはいくつかのバリアント)が行く方法だと思います。スタティックメソッドで使用されるモックメソッド

class UserModel { 

    public static function resetPassword() 
    { 
     // Code to generate new password, etc, etc 

     self::_sendMail($to, $body); 
     return 1; 
    } 

    private function _sendMail($to, $body) 
    { 
     // Send email 
    } 
} 

は、とにかく、私はので、私は適切に(ResetPasswordの中で他のロジックをテストすることができ_sendMailを()モックと自分自身のコードを挿入することができたPHPUnitにあります):ここでの状況はありますか?任意の助け

$this->assertTrue(UserModel::resetPassword()); 

ありがとう:

私のテストは、単純に次のようになります。

+0

なぜdownvote?私は質問に不満を抱いたことがありますか? –

+0

downvoteが削除されたように見える(: –

答えて

2

私はこれは、あなたがそれに続い

class MockUserModel extends UserModel 
{ 
    static function _sendMail($to, $body) 
    { 
     // do nothing 
    } 
} 

$this->assertTrue(MockUserModel::resetPassword()); 

を行うだろうかと思うしかし、私はユニットテストの第一人者ではないので、私は、これは野生のガチョウにあな​​たをリードした場合に謝罪します追跡。

+0

もちろん、これらのことはあなたの顔の真正面にあるととても単純です。 –

0

元のコードを再構成できます。それはより明確になり、よりテスト可能になります。

class UserModel 
{ 
    public static function resetPasswordAndSendMail() 
    { 
     if (!self::resetPassword()) { 
     return false; 
     } 
     self::_sendMail($to, $body); 
     return true; 
    } 

    public static function resetPassword() 
    { 
     // Code to generate new password, etc, etc 
     return true; 
    } 

    private static function _sendMail($to, $body) 
    { 
     // Send email 
    } 
}