mai 2009 (4)

vendredi 15 mai 2009

unserialize() et autoload

Il y a a quelques jours, en travaillant sur l'un de mes projets personnels, j'ai eu droit, à ma grande surprise, à la magnifique erreur PHP suivante :

Fatal error: uneClasse::__destruct(): The script tried to execute a method or access a property of an incomplete object.
Please ensure that the class definition "uneAutreClasse" of the object you are trying to operate on was loaded _before_
unserialize() gets called or provide a __autoload() function to load the class definition
in /le/fichier/qui/ne/fonctionne/pas.php on line 33

En gros, j'essayais de deserializer un objet d'une classe dont mon script ne connaissait pas la structure car l'autoload que j'avais mis en place ne parvenait pas à localiser le fichier contenant la classe en question.

Seul problème, le code concerné, éxécuté dans le cadre d'un test unitaire, ne faisait aucun appel à unserialize().

Chose encore plus étrange, en modifiant mon test de façon à ne pas générer d'exception, l'erreur disparaissait.

Lire la suite

Post-Hadopi

La loi dite Hadopi vient d'être adoptée par le Parlement et le Sénat. Je ne vais pas revenir sur les aspects négatifs de cette loi, d'autre le font déjà  et depuis bien longtemps, à tout les niveaux. Par contre, je vais mettre en lumière l'une des conséquences positives de cet événement, peut être  […]

Lire la suite

jeudi 7 mai 2009

Tester unitairement du code avec des dépendances externes

Bien souvent, le code PHP que nous devons écrire dépend de composants externes, comme par exemple :

  • Des bases de données.
  • Des connexions réseaux.
  • Des fichiers locaux ou distants.
  • Des segments de mémoire partagés.
  • Du code d'un autre développeur.

Ces composants externes ont la particularité de ne pas forcément être disponibles à tout moment et de manière fiable, et cela pour tout un tas de raisons, tel que :

  • La base de données à utiliser est une base de données propriétaire qui demande une licence et/ou est une vrai usine à gaz qui demande des compétence en administration de bases de données dont vous ne disposez pas.
  • Votre machine de développement est une machine itinérante qui ne dispose pas d'une connexion permanente à un réseau, et vous ne pouvez donc pas avoir les connexions nécéssaires, ou bien votre connexion est trop lente et entraîne un ralentissement important lors de l'éxécution des tests.
  • Le format des fichiers n'est pas encore défini, ou bien vous n'en disposez pas car ils sont estampillés secret défense (qui a pensé à la comptabilité de l'entreprise ou figure le salaire du patron ?).
  • Votre système d'exploitation ne supporte pas les segments de mémoire partagés, ou bien une des technologies que vous devez intégrer dans votre code.
  • Le développeur chargé du code dont dépend votre travail a un retard de six mois, ou bien est en longue maladie, etc.

Or, les tests unitaires doivent pouvoir être éxécutés automatiquement, à tout moment, et rapidement.

Ces dépendances externes posent donc un problème vis à vis des tests, puisqu'ils ne sont pas fiables.

Lire la suite

mardi 5 mai 2009

Je me sens moins seul !

J'ai découvert via Julien Pauli qu'une personne éprouve une exaspération très similaire à la mienne lorsqu'elle rencontre certain problème avec PHP, et elle le fait savoir.

Lire la suite