PHPUnit 5.7:调用方法两次

时间:2018-02-01 10:27:43

标签: php phpunit

我使用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());

        //....
    }

这是对的吗?

1 个答案:

答案 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());