Tests unitaires de Repository Doctrine

J'ai eu besoin de tester un service utilisant l'Entity Manager de Doctrine (pour récupérer des Repository et pour persister des entités)

Mon service faisait appel, entre autres, à un Repository d'une entité EntA. Voici comment j'ai fait pour "mocker" le nécessaire.

// On mocke le repository EntA
$entA = new EntA();
$entARepository = $this
    ->getMockBuilder(EntARepository::class)
    ->disableOriginalConstructor()
    ->getMock();
$entARepository->expects($this->once())
    ->method('findBy')
    ->will($this->returnValue($entA));

// On mocke l'entityManager
$manager = $this
    ->getMockBuilder(EntityManager::class)
    ->disableOriginalConstructor()
    ->getMock();
$manager->expects($this->once())
    ->method('getRepository')
    ->will($this->returnValue($entARepository));

// Enfin le service
$service = new ServiceATester($manager);
// On peut faire ensuite tous les tests que l'on veut
Le seul souci, c'est que le service ne doit pas utiliser les méthodes "magiques" du type findByX. On peut remplacer avantageusement ces appels par des findBy.