Как проверить глубокое клонирование с помощью PHPUnit

Я реализовал __clone в классе для клонирования дочерних объектов (т.е. глубокое клонирование.)

Я хочу написать тесты, чтобы убедиться, что этот процесс правильно реализован.

Когда я высмеиваю дочерний объект и пытаюсь установить ожидание в ‘__clone’, PHPUnit выдает ошибку, потому что метод не определен. Это пример того, как я пытаюсь написать утверждение.

<?php

public function testClone()
{
$mockChildObject = $this->createMock(ChildObject::class);
$mockChildObjectClone = $this->createMock(ChildObject::class);
$mockChildObject->expects($this->once())->method('__clone')->willReturn($this->createMock($mockChildObjectClone));

$object = new MyObject();
$object->addChild($mockChildObject);

$objectClone = clone $object;

$this->assertSame($mockChildObjectClone, $objectClone->getChild());
}

Полученная ошибка гласит:

Попытка настроить метод «__clone», который не может быть настроен, поскольку он не существует, не указан, является окончательным или статическим

__clone Метод не реализован на дочерних объектах, так как клонирования по умолчанию достаточно.

Я также пытался использовать $this->getMockBuilder() с различными комбинациями disableOriginalClone()/enableOriginalClone() а также enableArgumentCloning()/diableArgumentCloning(),

Единственный способ, которым я могу думать о тестовом клонировании, — это написать другой класс, который расширяет дочерний объект и реализует __clone(), Но это кажется чрезмерным, и я уверен, что должно быть более практичное решение.

1

Решение

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

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

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

По вопросам рекламы [email protected]