【发布时间】: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,然后在完成后删除吗?还是有更多的逻辑被触发?