Bonjour à tous,
voici mon problème.
Pour tester le code de mon projet, je souhaite écrire un test unitaire sur une entité Doctrine avec phpunit. Plus précisément j'aimerais tester le mécanisme de validation de l'entité.
J'ai réussit à mettre ça en place sur un premier cas simple qui contient des validations standard.
Ci-dessous un test unitaire sur une entité qui contient des validations standard de Symfony2.
(Je crée une entité vide et j'attends que les contraintes NotNull placées dans mon entité me retournent des erreurs.)
Mon problème se situe sur des entités qui utilisent des validateurs spécifiques. Le même code me retourne une erreur m'indiquant qu'il ne trouve pas la classe du validateur en question.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51 class AppelOffreEntityTest extends \PHPUnit_Framework_TestCase { /** * Crée et retourne une entité AppelOffre */ private function getNewEntity() { $taux_remuneration = new AppelOffre(); return $taux_remuneration; } /** * Méthode qui effectue les assert (tests) attendus * * @param TauxRemuneration $entity * @param boolean $assert * @param integer $nb_erreurs_attendues (null par défaut) */ private function assertValidateEntity(AppelOffre $entity, $assert, $nb_erreurs_attendues=NULL) { $validator = ValidatorFactory::buildDefault()->getValidator(); $errors = $validator->validate($entity); if ( $assert==TRUE ) { $this->assertEquals(0, count($errors)); } elseif ( $assert==FALSE ) { if ($nb_erreurs_attendues==NULL) { $this->assertTrue(0 < count($errors)); } else { $this->assertEquals($nb_erreurs_attendues, count($errors)); } } } /** * Test validation d'une entité vide (4 erreurs attendues) */ public function testCreateEntity() { $entity = $this->getNewEntity(); $this->assertValidateEntity($entity, FALSE, 4); } }
Précision: Mes validateurs sont créés avec les classes Constraint et ConstraintValidator. J'utilise ensuite le fichier service.yml pour déclarer la nouvelle contrainte. Le code fonctionne dans mes formulaires.
J'ai bien essayé d'ajouter mes validator dans le fichier de test mais je me suis noyé dans la documentation et heurté au mécanisme d'injection de dépendance. Je ne sais pas comment reproduire ce mécanisme dans mon test.
Quelqu'un connait-il un moyen de valider une entité qui utilise un ou plusieurs validator spécifique ? Une piste à explorer ?
En vous remerciant de l'intérêt porté à mon message.
Partager