Я использую dataProvider и мне нужно переменное количество выполненных запросов, которые я могу использовать для заполнения своего провайдера, я хочу предоставить массив запросов, которые должны быть выполнены.
Проблема с withConsecutive
состоит в том, что он принимает переменное число массивов, каждый из которых представляет собой массив аргументов.
Я решил это с помощью следующего кода, это выглядит "хакерским", но работает:
$withConsecutiveArgs = [
[$this->equalTo($title_query)],
[$this->equalTo($desc_query)],
...,
N queries
];
$withConsecutiveReturns = [
$title_stmt,
$desc_stmt,
...,
N returns
];
$methodMock = $pdo->expects($this->exactly(count($args))->method('prepare');
$methodMock->getMatcher()->parametersMatcher = new \PHPUnit_Framework_MockObject_Matcher_ConsecutiveParameters($withConsecutiveArgs);
$methodMock->will(new \PHPUnit_Framework_MockObject_Stub_ConsecutiveCalls($withConsecutiveReturns));
$title_stmt = $pdo->prepare($title_query);
$desc_stmt = $pdo->prepare($desc_query);
...
$N_s_stmt = $pdo->prepare($N_s_query);
Я надеюсь, что он будет развиваться корректно с будущими версиями PhpUnit (что неясно, так как я полагаюсь на внутренние компоненты библиотеки, но в этом весь смысл модульного тестирования, возможно, мне придется его реорганизовать, но производство не пострадает от этого )