有没有办法可以完全测试这个方法,因为我没有直接将模型传递给它,但是我希望我的经理能为我创建它?
public function giveAchievement(User $user, $achievementType)
{
$a2p = new Achievement2User();
$a2p->setUser($user);
$a2p->setAchievement($this->em->getReference(AchievementManager::ACHIEVEMENT_CLASS, $achievementType));
$a2p->setObtainedOn(new \DateTime());
$this->em->persist($a2u);
$this->em->flush();
}
由于我嘲笑$em
,我可以检查是否使用persist
的实例调用Achievement2User
方法:
$this->em->expects($this->once())
->method('persist')
->with($this->isInstanceOf('Achievement2User'));
但有什么方法可以检查传递的模型是否正确设置了User
和Achievement
字段?
答案 0 :(得分:0)
以下是我设法做到的方法:
// Create $userObject and $achievementObject entities/models
$this->em->expects($this->once())
->method('persist')
->with($this->isInstanceOf('Achievement2User'))
->will($this->returnCallback(function (Achievement2User $a2u) use ($userObject, $achievementObject) {
$this->assertTrue($a2u === $userObject);
$this->assertTrue($a2u === $achievementObject);
}));
PHPUnit显然会将预期的方法参数传递给回调函数。