我有一个联系人控制器,可以呈现我的联系表格并验证请求。验证成功后,联系控制器创建一个Contactobject并从ContactHandler调用方法proceedContact。现在我想为我的处理程序编写一个phpunit测试。这是我的第一次单元测试。我有以下问题。
这个用例存在类似的例子吗?
namespace AppBundle\Utils;
use AppBundle\Entity\Contact;
class ContactHandler
{
private $mailer;
private $templating;
private $translator;
private $emailTo;
private $emailCc;
public function __construct($mailer, $templating, $translator, $emailTo, $emailCc)
{
$this->mailer = $mailer;
$this->templating = $templating;
$this->translator = $translator;
$this->emailTo = $emailTo;
$this->emailCc = $emailCc;
}
public function proceedContact(Contact $contact)
{
$subject_part_1 = $this->translator->trans('contact_mail_subject');
$subject_part_2 = $this->translator->trans($contact->getRequest());
$subject = $subject_part_1 . ' - ' . $subject_part_2;
$message = \Swift_Message::newInstance()
->setSubject($subject)
->setFrom($contact->getEmail())
->setTo($this->emailTo)
->setCc($this->emailCc)
->setBody(
$this->templating->render(
'Emails/contact.html.twig',
array('name' => $contact->getName(), 'message' => $contact->getMessage())
),
'text/html'
);
$this->mailer->send($message);
}
}
答案 0 :(得分:1)
这种逻辑(电子邮件发送)不应该在实体中完成。
您应该改为创建服务,或在相应的控制器中创建方法。
此外,当您的逻辑架构正常时,要在测试中处理服务容器,请参阅文档的the corresponding part。
另见this very good article about using Dependency Injection in tests。
并且,要从您的测试中发送电子邮件(在这种情况下功能比单位更多),请参阅E-mail testing。
尝试使用此信息来构建测试,如果遇到困难,请在此处提出精确问题以解决确切问题。