Последовательные звонки звонили чаще, чем ожидалось

Прежде чем я задам этот вопрос, имейте в виду, что это значительно упрощенная версия моего реального контрольного примера.

Я издеваюсь над интерфейсом с целью сбора аргументов, с которыми был вызван определенный метод. Вот мой код:

interface NormalInterface {
public function functionWithOneParameter($parameter);
}

class NormalInterfaceTest {
public function testBasicMockCallback() {
$mock = $this->getMockForAbstractClass(NormalInterface::class);
$names = [];
$cb = function ($name) use (&$names) {
$names[] = basename($name);
return true;
};
$mock->expects($this->exactly(4))
->method("functionWithOneParameter")
->withConsecutive([ $this->callback($cb) ],[ $this->callback($cb) ],[ $this->callback($cb) ],[ $this->callback($cb) ])
->willReturn(true,true, true, true);
$mock->functionWithOneParameter("one");
$mock->functionWithOneParameter("two");
$mock->functionWithOneParameter("three");
$mock->functionWithOneParameter("four");
// If the test ends here it works fine
$this->assertCount(4, $names);
}
}

Вышеуказанный тест работает без линии $this->assertCount(4, $names) Это означает, что метод макета вызывается ровно 4 раза.

Однако с этой строкой я получаю:

Не удалось утверждать, что фактический размер 14 соответствует ожидаемому размеру 4.

Фактическое содержание $names является:

array:14 [
0 => "one",
1 => "one", 2 => "two",
3 => "one", 4 => "two", 5 => "three"6 => "one", 7 => "two", 8 => "three", 9 => "four"10 => "one", 11 => "two", 12 => "three", 13 => "four"]

Я думаю, что обратный вызов будет вызываться 4 раза по одному для каждого вызова функции, но, очевидно, он вызывается 14 раз. Я делаю что-то неправильно? Я в корне не понимаю, как это работает?

Обновить:

Проблема решается, если я заменю withConsecutive с простым: with($this->callback($cb))->willRetrurn(true) что в данном конкретном случае эквивалентно, но в тех случаях, когда я хочу, чтобы каждый последующий вызов проверял что-то другое, это не будет работать. Я чувствую, что мне не хватает чего-то очень фундаментального в том, как PHPUnit проверяет параметры последовательного вызова.

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector