我使用PHPUnit 5.7。我有一个名为getData的方法。在这个方法中,我调用函数findCustomers两次:首先使用参数,第二次使用参数
public function getData($limit, $offset, $orderBy, $urlPathParams)
{
//....
$idCustomer= $urlPathParams[0];
$customers = $this->findCustomers(['idCustomer' => $idCustomer], $limit, $offset, $orderBy);
return $this->findCustomers([], $limit, $offset, $orderBy);
}
我实施了UT:
/**
* @covers \Model\Controller\CustomersController::getData()
*/
public function testGetData()
{
//....
$this->customerController->expects($this->once())
->method('findCustomers')
->with(['idCustomer' => 1], 0, 0, null)
->willReturn(new \Model\Entity\CustomersEntity());
$this->customerController->expects($this->once())
->method('findCustomers')
->with([], 0, 0, null)
->willReturn(new \Model\Entity\CustomersEntity());
//....
}
这是对的吗?
答案 0 :(得分:1)
否则会返回失败。 您需要在索引(read more about test doubles here)
使用PHPUnit_Framework_MockObject_Matcher_InvokedAtIndex at(int $ index)
返回匹配的匹配器匹配的匹配器 在给定的$ index处调用。
注:
at()匹配器的$ index参数引用索引,从>开始。零,在给定模拟对象的所有方法调用中。使用此匹配器时要小心,因为它可能导致脆弱的测试,这些测试与特定的实现细节过于紧密相关。
即
$this->customerController->expects($this->at(0))
->method('findCustomers')
->with(['idCustomer' => 1], 0, 0, null)
->willReturn(new \Model\Entity\CustomersEntity());
$this->customerController->expects($this->at(1))
->method('findCustomers')
->with([], 0, 0, null)
->willReturn(new \Model\Entity\CustomersEntity());