Lors des tests unitaires, je me retrouve souvent à débattre de la quantité de données que j'alimente et j'attends de mes unités testées que je devrais inclure dans les fichiers de test réels.
Le compromis avec lequel je lutte constamment est:
- Si une grande partie du test (en volume de code) se compose de données d'entrée et de sortie, il semble difficile de lire réellement le test, mais je peux facilement voir les entrées et sorties réelles.
- Si je charge les données de test à partir de fichiers, je peux facilement tester un tas de variations sur une entrée de données possible, réutiliser facilement les données de test pour plusieurs tests, mais je dois laisser le code source pour regarder un autre fichier pour voir quelles sont exactement les entrées. .
L'un ou l'autre est-il un anti-modèle?
unit-testing
anti-patterns
unit-test-data
DudeOnRock
la source
la source
Réponses:
Pour répondre directement à votre question - non, je ne crois pas non plus que ce soit un anti-modèle lorsqu'il est utilisé correctement.
--- Réponse plus verbeuse ---
D'après mon expérience, je pense que cela dépend fortement de l'objectif de votre test. Voici la règle générale que j'ai utilisée dans le passé et cela m'a aidé à décider:
Testez-vous actuellement une petite unité de code? (Un vrai test unitaire)
Si oui, j'ai trouvé qu'il était beaucoup plus facile de créer les données à l'intérieur du test lui-même, car je peux voir ce qui est passé. Dans ces cas, je vais généralement chercher une bibliothèque de type Jasmine à utiliser car je trouve que il facilite la création et la maintenance des données de test. C'est une préférence personnelle - utilisez tout ce qui vous facilite la tâche.
Si non, vous testez probablement le système lui-même. Dans ces cas, je charge souvent des données à partir d'une source externe, pour les raisons suivantes:
Donc, réponse courte, cela dépend de ce que vous testez et pourquoi. Les deux approches sont utiles et ont leur place - choisissez celle qui convient le mieux à votre situation.
la source
Je ne vois pas de compromis ici. Le code source est censé décrire des algorithmes, ou du moins une logique métier, pas de grandes quantités de données. Si vous écrivez une transformée de Fourier, vous voulez vérifier qu'une tonalité sinusale est correctement mappée à une seule crête, un son mélangé à plusieurs crêtes, etc., mais pour cela, il suffit complètement d'alimenter un fichier nommé
sinus.wav
dans la routine et de vérifier que la structure de sortie correspond à ce que vous attendez.Bien sûr, techniquement, vous n'avez pas d'assurance immédiate qui
sinus.wav
contient vraiment un ton sinusal, mais comme vous l'avez dit, la liste des 100 000 valeurs d'amplitude dans la source ne vous donne pas vraiment cela non plus - en fait, c'est pire , parce que vous peut au moins lire un fichier externe avec un lecteur audio pour vérifier, tandis que les valeurs de données enfouies dans le code source sont essentiellement impossibles à faire.la source