【发布时间】:2016-09-10 10:54:29
【问题描述】:
假设我有我指定的这个类(遵循 BDD 方法)
class Logger
{
private $em;
public function __construct(EntityManager $em)
{
$this->em = $em;
}
public function logMessageAsRead(Message $message)
{
$log = new LoggedMessage($message);
$this->em->persist($message);
}
}
而LoggedMessage定义如下
class LoggedMessage
{
private $date;
private $message;
public function __construct(Message $message)
{
$this->date = new \DateTime();
$this->message = $message;
}
}
有时,由于规范中实例化的 Message 日期与 Logger 类中的日期不一致,我的规范示例会失败。
class LoggerSpec
{
public function it_logs_a_message(Message $message, EntityManager $em)
{
$log = new LoggedMessage($message);
$em->persist($log)->shouldBeCalled(1);
$this->logMessageAsRead($message);
}
}
问题一:我的代码中是否有异味,是否需要创建一个协作者(即:工厂)并将其注入Logger 以创建新的LoggedMessage?
问题二:如果不需要注入新的协作者,我如何确保我的规范每次都能正常工作,并且不会由于日期时间差异而随机失败?
【问题讨论】: