我为我的案件找到了解决办法。如果有人需要的话,这就是我测试的样子
public function testGetCompletedRequestByName()
{
$queryBuilder = $this->getMockBuilder(QueryBuilder::class)->disableOriginalConstructor()
->setMethods(['setParameter', 'getQuery', 'getOneOrNullResult', 'join', 'andWhere', 'where'])->getMock();
$queryBuilder->method('getQuery')->willReturnSelf();
$queryBuilder->method('setParameter')->willReturnCallback(function ($field, $value) use ($queryBuilder){
if ($field == 'name') {
$this->assertSame('antrax.com', $value);
} elseif ($field == 'completed') {
$this->assertSame('COMPLETED', $value);
}
return $queryBuilder;
});
$queryBuilder->method('join')->willReturnCallback(function ($field, $alias, $operator, $cond) use ($queryBuilder){
$this->assertSame('r.domains', $field);
$this->assertSame('d', $alias);
$this->assertSame(Join::WITH, $operator);
$this->assertSame('r.id = d.request', $cond);
return $queryBuilder;
});
$queryBuilder->method('where')->willReturnCallback(function ($cond) use ($queryBuilder){
$this->assertSame('r.name = :name', $cond);
return $queryBuilder;
});
$queryBuilder->method('andWhere')->willReturnCallback(function ($cond) use ($queryBuilder){
$this->assertSame('r.status = :completed', $cond);
return $queryBuilder;
});
$repositoryMock =
$this->getMockBuilder(RequestRepository::class)->disableOriginalConstructor()
->setMethods(['createQueryBuilder'])->getMock();
$repositoryMock->method('createQueryBuilder')->willReturnCallback(function ($alias) use ($queryBuilder){
$this->assertSame('r', $alias);
return $queryBuilder;
});
$repositoryMock->getCompletedRequestByName('antrax.com');
}