Como criar testes com entidades Doctrine sem persisti-los (como definir id)

Estou trabalhando em testes para um projeto Symfony2, e agora estou procurando uma maneira de criar testes envolvendo objetos de entidade sem persistir neles. O problema é:identidade é um campo privado e não há setter para isso. Eu posso criar um novo objeto e definir algumas propriedades, mas não posso testar nada que envolvagetId () chamadas.

$entity = new TheEntity();
// Can't set ID!
$entity->setProperty('propertyValue');

$name = $entity->getProperty(); // OK
$id = $entity->getId(); // not OK - null

As resoluções que conheço:

Inicializando o kernel inteiro (o SymfonyWebTestCase :: createKernel ()) e persistindo as entidadesCriando um objeto simulado para cada entidade, que retornará um ID válidoHacks como método estático emA entidade classe retornando objeto inicializado, ou adicionando setter paraidentidade campo

Qual é a maneira recomendada de lidar com isso, como obter uma entidade para testes de maneira limpa e rápida, com o ID do conjunto?

Editar

Acabou que eu posso resolver isso com zombaria ... desculpe, eu ainda estou aprendendo. Eu estava procurando por uma maneira limpa, padrão e rápida de fazer as coisas. No entanto, eu esqueci o segundo parâmetro degetMock() - isso éEu não tenho que zombar de todos os métodos da entidade que vou usar. Eu queria evitar múltiplos->expects()->method()->will() etc. E isso é conseguido adicionando:array('getId'). Este método auxiliar resolve o problema:

protected function getEntityMock($entityClass, $id)
{
    $entityMock = $this->getMock($entityClass, array('getId'));
    $entityMock
            ->expects($this->any())
            ->method('getId')
            ->will($this->returnValue($id));

    return $entityMock;
}

Ao criar muitas entidades da mesma classe, é claro que as coisas podem ser simplificadas mais por métodos auxiliares como este:

protected function getTheEntityMock($id)
{
    return $this->getEntityMock('\The\NameSpace\TheEntity', $id);
}

O únicolimitação é que a entidade em si não pode usarid propriedade, apenasgetId() getter.

Qualquer entrada valiosa ainda é bem-vinda, mas acredito no PHPUnitgetMock() resolvido isso bem.

questionAnswers(3)

yourAnswerToTheQuestion