PHPUnit分析预期的方法调用参数

时间:2013-11-06 21:41:20

标签: phpunit

有没有办法可以完全测试这个方法,因为我没有直接将模型传递给它,但是我希望我的经理能为我创建它?

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'));

但有什么方法可以检查传递的模型是否正确设置了UserAchievement字段?

1 个答案:

答案 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显然会将预期的方法参数传递给回调函数。