Добрый день,
Возможно ли задать ожидание порядка выполнения методов мока в phpunit? и нужно ли это делать в юнит-тестах?
К примеру есть тестируемый класс:
<?php
class XXX
{
private $db;
public function __construct($db)
{
$this->db = $db;
}
public function doSomething(array $list)
{
$db->truncate();
foreach ($list as $item) {
$db->insert($item);
}
}
}
И тест к нему:
class XXXTest extends \PHPUnit_Framework_TestCase
{
/**
* @test
*/
public function doSomething()
{
$xxx = new XXX($this->createDBMock($this->getList()));
$xxx->doSomething($this->getList())
}
private function createDBMock($list)
{
$mock = $this->createMock(DB::class);
$mock
->expects($this->once())
->method('truncate');
$mock
->expects($this->exactly(count($list)))
->method('save')
->with($list[0], $list[1]);
return $mock;
}
private function getList()
{
return ['foo', 'bar'];
}
}
Если в методе doSomething изменится последовательность вызова методов, то тесты не поломаются, однако сломается логика класса
public function doSomething(array $list)
{
foreach ($list as $item) {
$db->insert($item);
}
$db->truncate();
}