прямо сейчас я использую следующий код в PHPUnit, чтобы ожидать, что никакой метод не будет вызван для имитации:
$object = $this->createMock(ClassA:class);
$object->expects($this->never())->method($this->anything());
Пока я не нашел способа достичь того же результата в Prophecy . До сих пор мне удалось проверить предположения только для определенных c методов, а не для всех методов, как в примере выше.
В настоящее время я использую следующее настраиваемое утверждение, чтобы проверить, не был ли вызван какой-либо метод . ObjectProphecy от Prophecy предоставляет метод для получения всех вызовов определенной c функции, поэтому я использую отражение, чтобы получить все методы класса, а затем каждый вызов для каждого метода. Если впоследствии массив вызовов пуст, я знаю, что ни один метод не был вызван. Теперь метод выглядит следующим образом:
public function assertNoMethodHasBeenCalled(ObjectProphecy $prophecy, string $className)
{
$methods = get_class_methods($className);
$calls = [];
foreach ($methods as $method) {
$reflectionMethod = new \ReflectionMethod($className, $method);
$numArgs = count($reflectionMethod->getParameters());
$calls = array_merge(
$calls,
$prophecy->findProphecyMethodCalls(
$method,
new ArgumentsWildcard(array_fill(0, $numArgs, Argument::any()))
)
);
}
$this->assertEmpty($calls);
}
Пока он работает для моего ограниченного размера выборки, но меня это не устраивает. Я чувствую, что должен быть более простой способ достичь того же результата.