2
に私はユニットテストに、この単純なサービスたく:だからモックメーラーはsymfonyサービス
/**
* Class Messager
* @package AppBundle\Services
*/
class Messager
{
private $mailer = null;
private $templating = null;
/**
* Messager constructor.
* @param \Swift_Mailer $mailer
*/
public function __construct(\Swift_Mailer $mailer, TwigEngine $templating)
{
$this->mailer = $mailer;
$this->templating = $templating;
}
/**
* Send mail
* @param string $email
* @param string $message
* @return bool
*/
public function handleMessage(string $email, string $content) : bool
{
if (!filter_var($email, FILTER_VALIDATE_EMAIL) || strlen($content) < 25) {
return false;
}
$message = \Swift_Message::newInstance()
->setSubject('[DadaPleasure] Incoming message from user')
->setFrom($email)
->setTo('[email protected]')
->setBody($this->templating->render('Emails/contact.html.twig', array('email' => $email, 'message' => $content)), 'text/html');
$this->mailer->send($message);
return true;
}
}
を、私は現在、これをやっている:
class MessagerTest extends TestConfig
{
public function testSendWrongMessage()
{
$mailer = $this->getMockBuilder('Swift_Mailer')
->disableOriginalConstructor()
->getMock();
self::$container->set('swiftmailer.mailer.default', $mailer);
$this->assertFalse(self::$container->get('app.messager')->handleMessage('hello', 'world'));
$mailer->expects($this->never())->method('send');
}
public function testSendValidEmail()
{
$mailer = $this->getMockBuilder('Swift_Mailer')
->disableOriginalConstructor()
->getMock();
$messager = new Messager($mailer, self::$container->get('templating'));
$this->assertTrue($messager->handleMessage('[email protected]', 'worldworldworldworldworld'));
$mailer->expects($this->once())->method('send');
}
}
しかし、私のでsend
が呼び出されないように思えます
メソッド名の期待値は、1回呼び出されたときと同じです。 メソッドは1回呼び出され、実際には0回呼び出されると予想されました。
私はvar_dump
を追加した場合、私の関数は$this-mailer->send
で渡したがアサートに失敗した理由を私は知りません。
私は間違っていますか?
おそらく '追加 - >と(何(の$ this - >))'終わり? – sakhunzai