【问题标题】:PHPUnit analyze expected method call parameterPHPUnit分析预期的方法调用参数
【发布时间】:2013-11-06 21:41:20
【问题描述】:

由于我没有将模型直接传递给它,而是希望我的经理为我创建它,因此我有什么方法可以完全测试此方法?

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,我可以检查它是否使用Achievement2User 的实例调用了persist 方法:

$this->em->expects($this->once())
    ->method('persist')
    ->with($this->isInstanceOf('Achievement2User'));

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

【问题讨论】:

  • 你要测试什么类?
  • 没关系,就叫它AchievementManager,它只包含一个方法,就是我写源代码的那个。 UserAchievement2User 只是带​​有 getter+setter 和 0 逻辑的普通模型。

标签: phpunit


【解决方案1】:

这是我设法做到的:

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

【讨论】:

    猜你喜欢
    • 2015-09-17
    • 1970-01-01
    • 2015-01-16
    • 2020-06-06
    • 1970-01-01
    • 1970-01-01
    • 2011-08-24
    • 1970-01-01
    • 2012-11-03
    相关资源
    最近更新 更多