2010-10-09 7 views
2

Je suis un peu novice dans les tests unitaires, mais j'ai récemment vu comment cela peut être très utile. J'ai vu que la plupart des tests unitaires sont auto-exécutables. En fait, la plupart des frameworks de tests unitaires permettent d'exécuter plusieurs tests en même temps (comme tester un système entier).Tests unitaires et ressources externes

Je me demande cependant; Comment traitez-vous les ressources externes dans les tests unitaires auto-exécutables? J'aime l'idée de tester un système entier et de voir quelles classes ont échoué, mais une classe peut, par exemple, créer des vignettes à partir d'une image téléchargée. Comment ce test serait-il auto-exécutable lorsqu'il repose sur une image téléchargée? Est-ce que je garderais un répertoire d'images, et "fais semblant" d'en télécharger un dans le test?

Toute idée à ce sujet serait grandement appréciée.

Répondre

1

Je suis tombé sur cette même situation lors de l'essai de mes classes PHP. Il existe des fonctions qui peuvent être testées sans utiliser d'autres ressources (tests unitaires), mais de nombreuses fonctions effectuent des opérations de lecture/écriture de fichiers ou requièrent un accès à la base de données (tests d'intégration). Afin de tester ces fonctions, j'ai combiné les tests unitaires avec les tests d'intégration. Dans mes classes de tests setUp et tearDown, il est possible de charger un schéma de base de données ou d'extraire des données de test à partir d'un répertoire test_data/local requis par les fonctions de classe.

1

Si vous devez tester ce qui se passe avec la saisie par l'utilisateur, vous avez en effet besoin de quelques exemples de données. Un répertoire avec des images, des fichiers texte, des fichiers PDF ou tout ce qui est nécessaire, devrait être là lors de vos tests unitaires. Ou vous pouvez générer des données aléatoires par programmation dans vos tests.

2

Si vous envisagez de tester des ressources externes, il s'agira de tests d'intégration. En pur tests unitaires -> pour tester des ressources externes, vous devez simuler la ressource externe. Dans ce cas, créez une interface IDirectory, puis utilisez une classe FakeDirectory, puis utilisez FakeDirectory pour "télécharger" l'image. Et quand vous utilisez réellement l'application, vous passeriez un répertoire réel. Dans les tests d'intégration, vous pourriez avoir une classe d'installation qui ferait tout le travail à mettre en place et ensuite vous testeriez.

1

Oui, idéalement, une classe qui crée une miniature peut utiliser une image d'espace réservé que vous fournissez en tant que ressource dans votre répertoire de test unitaire. Vous devriez être capable de tester la classe de manière isolée, avec le moins de dépendance possible au reste de votre application. C'est un peu ce que les gens veulent dire quand ils recommandent de concevoir votre code pour qu'il soit «testable».

1

Faux dépendances externes. Je n'ai pas vraiment l'expérience de se moquer de php mais j'ai vu assez de ressources en ligne juste googler pour mock et php que c'est fait