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
    }
}

_sendMail() をモックして独自のコードを挿入できる PHPUnit には、 resetPassword() で他のロジックを適切にテストできるのでしょうか?

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

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

助けてくれてありがとう。

4

3 に答える 3

2

私はこれがあなたがそれを行う方法だと思います

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

それから

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

しかし、私は単体テストの第一人者ではないので、これがあなたを野生のガチョウの追跡に導く場合は申し訳ありません.

于 2009-03-13T18:52:04.530 に答える
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
    }
}
于 2009-03-27T10:45:30.260 に答える
0

ここでアダプター パターンを利用すると便利な場合があります。同様のシナリオとその他の可能な解決策については、PHPUnit での FTP 操作のモッキング/スタブを参照してください。

于 2011-11-29T23:05:24.960 に答える