Cómo crear pruebas con entidades de Doctrine sin persistir en ellas (cómo establecer la identificación)

Estoy trabajando en pruebas para un proyecto Symfony2, y en este momento estoy buscando una manera de crear pruebas que involucren objetos de entidad sin persistir en ellos. El problema es:carné de identidad Es un campo privado y no hay setter para eso. Puedo crear un nuevo objeto y establecer algunas propiedades, pero no puedo probar nada que involucregetId () llamadas

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

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

Las resoluciones que conozco:

Inicializando kernel entero (Symfony'sWebTestCase :: createKernel ()) y persistiendo las entidadesCreando un objeto simulado para cada entidad, que devolverá una identificación válidaHacks como método estático en.La entidad clase que devuelve el objeto inicializado, o que agrega settercarné de identidad campo

¿Cuál es la forma recomendada de lidiar con esto, cómo obtener una entidad para realizar pruebas de forma limpia y rápida, con el ID de conjunto?

Editar

Resultó que puedo resolver esto con burla ... lo siento, todavía estoy aprendiendo. Estaba buscando una manera limpia, estándar y rápida de hacer las cosas. Sin embargo me olvidé del segundo parámetro degetMock() - es decirNo tengo que burlarme de todos los métodos de la entidad que voy a usar.. Queria evitar multiples->expects()->method()->will() Y esto se logra agregando:array('getId'). Este método auxiliar resuelve el problema:

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

    return $entityMock;
}

Cuando se crean muchas entidades de la misma clase, las cosas se pueden simplificar, por supuesto, más con más métodos auxiliares como este:

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

Lo únicolimitación es que la entidad en sí no puede usarid solo propiedadgetId() adquiridor.

Cualquier aportación valiosa aún es bienvenida, pero creo que PHPUnitgetMock() Resuelto este bien.

Respuestas a la pregunta(3)

Su respuesta a la pregunta