0

コントローラーの1つに、依存性注入を使用して電子メールとSMSを送信する次のコードがあります。これは正常に動作します

                $message = new \Application\SendMessage\Message();

                $message->toName = $toName; 
                $message->toEmail = $toEmail; 
                $message->fromEmail = $fromemail;
                $message->emailBodyText = $emailBodyText;
                $message->smsMessage = $emailBodyText;
                $message->toMobile = $toMobile;


                $seSMS = new \Application\SendMessage\SendSMS($message);    
                $suSMS = new \Application\SendMessage\SendMessage($seSMS);
                $statusMsg = $suSMS->releaseMsg();

                $seEmail = new \Application\SendMessage\SendEmail($message);
                $suEmail = new \Application\SendMessage\SendMessage($seEmail);
                $statusMsgEmail = $suEmail->releaseMsg();

そして、次のコードを使用してテストしています

public function testcreateActionCanBeAccessed() 
{

    $postData = array(
        // variables here
    );

    $this->dispatch('/mycontroller/myaction', 'POST', $postData);
    $this->assertResponseStatusCode(200);
}

これは問題なく動作し、100% のコード カバレッジが得られます。唯一の問題は、単体テストを実行するたびに、電子メールが送信され、SMS テキスト メッセージもリリースされることです。メール送信とテキスト メッセージング機能もテストするので、これは良いこともあります。

しかし、何度も何度もテストを実行しなければならない場合は、ちょっと面倒です。上記のコードをモックして、100% のコード カバレッジが得られるようにするにはどうすればよいでしょうか。ただし、SMS テキストや電子メールは送信されません。

4

1 に答える 1

1

1 つの方法は、「サービス ロケーター パターン」http://en.wikipedia.org/wiki/Service_locator_patternを利用することです。

それ以外の:

$message = new \Application\SendMessage\Message();

次のようなものがあります。

$message = $service_locator->new('Application\SendMessage\Message');

テストでは、モック ( http://phpunit.de/manual/3.7/en/test-doubles.html ) を利用して、実際にはメールを送信しない「ダミー」メッセージ/送信メッセージを返すことができますが、それでも確実に適切なメソッドが呼び出されます。

于 2013-10-21T21:47:27.503 に答える