Bonjour,
Je me demande quelle est la meilleur option pour tester plusieurs cas de figure.
Cas 1
Cette fonction prend deux paramètres et indique si l'authentification est réussie.
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 public static function authenticate(Request $request, Application $app) { $device_id = $request->get('device_id'); $secret_code = $request->get('secret_code'); if ($device_id == null) $app->abort(400, 'Device id missing'); if ($secret_code == null OR !is_numeric($secret_code)) $app->abort(400, 'Bad secret code'); $ret = $app['db']->fetchAssoc(' SELECT `t1`.`id`, `secret_code` FROM `clients` AS `t1` JOIN `payment_devices` AS `t2` ON `clients_id` = `t1`.`id` WHERE `t2`.`id` = ?', array($device_id)); if (!$ret) $app->abort(404, 'User not found'); if (intval($secret_code) !== intval($ret['secret_code'])) $app->abort(401, 'Bad authentification'); return $app->json(array( 'id' => $ret['id'] )); }
Pour tester cette fonction deux solutions s'offrent à moi :
- Passer par une class intermédiaire qui fait office de "repository" et l'injecter dans la fonction.
A la place de la requête SQL j'aurai quelque chose comme "$repo->getClient(...)" Cela me permettra de mock l'accès BDD.- Utiliser une fixture importée par PHPUnit (dans ce cas un schéma et des données bdd connue à l'avance)
Case 2
Cette fonction modifie un champ dans la table des clients.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 public static function editSecretCode(Request $request, Application $app) { [...] $req_update = $app['db']->executeQuery(' UPDATE `clients` SET `secret_code` = ? WHERE `id` = ?', array($new_secret_code, $user_id)); [...] }
Comment tester cette modification ?
Puis-je supposer que si la méthode ne renvoi pas d'erreur c'est que l'UPDATE a été fait ?
J'aimerais si possible éviter de passer par les fixtures PHPUnit qui ralentissent le code et sont plus longues à mettre en place et à maintenir.
Précisions
Toutes ces fonctions sont des méthodes de webservice, quelle est la meilleur façon de tester :
- Tester les appels comme un client le ferait et vérifier le retour
- Tester chaque élément interne et partir du postulat que si chaque élément interne fonctionne alors l'ensemble est cohérent
Merci pour votre aide
Partager