【问题标题】:PHPUnit: How to test a class method that uses another static classes methodPHPUnit:如何测试使用另一个静态类方法的类方法
【发布时间】:2021-03-12 11:08:15
【问题描述】:

我有一个要编写单元测试的类方法,它的开头是这样的:

public function determineStatusActivity($proposal, $decisionStatusId): ?array
    {
        if (isset($proposal->contact_org_id)) {
            $this->personId = PipedriveActivityHelper::getPersonId($proposal->contact_org_id);
        }

然后我有我的测试方法,它将需要响应来运行检查:

public function acceptedActivityTest()
{
    $activity = new CreateActivityInPipedriveForProposalStatusChange();
    $response = $activity->determineStatusActivity($this->proposal, 1);

    //Compare the response to a defined stub..
}

这个类方法determineStatusActivity()接收两条数据,我可以创建模拟传递给它,但是当它到达静态PipedriveActivityHelper类时我不知道该怎么做,有没有办法定义静态类在测试文件方法中的行为?

【问题讨论】:

  • PipedriveActivityHelper::getPersonId 是做什么的?访问数据库?联系 API?其他不应该在测试中执行的东西?
  • 实际上它访问数据库信息但应该只返回一个整数 id,即 3
  • 有非静态方法吗?
  • 根本没有,只有静态的,如果我可以模拟它并且只返回一个值而不执行那将是完美的。
  • 可以模拟数据库设置本身吗?例如,您可以插入一个返回有效personId contact_org_id,然后在完成后删除吗?还是有更多的逻辑被触发?

标签: php laravel phpunit


【解决方案1】:

我相信this 是您正在寻找的东西,请注意测试类装饰器。 TDD 始终是最好的方法。

【讨论】:

    猜你喜欢
    • 2014-02-08
    • 2021-10-11
    • 2015-02-13
    • 1970-01-01
    • 2011-05-20
    • 1970-01-01
    • 1970-01-01
    • 2013-10-18
    • 1970-01-01
    相关资源
    最近更新 更多