2009-08-17 4 views
1

Comment testez-vous si le code compilé renvoie le résultat attendu ou échoue comme prévu?Le meilleur moyen de tester le code compilé pour retourner la sortie/les erreurs attendues

J'ai développé un exemple de travail ci-dessous, mais il n'est pas facilement extensible. Chaque test supplémentaire nécessiterait des parenthèses d'imbrication supplémentaires. Bien sûr, je pourrais diviser cela en d'autres fichiers, mais avez-vous des suggestions sur la façon d'améliorer cela? Aussi, je prévois d'utiliser cela depuis la section make test dans un makefile, donc je ne m'attends pas à ce que d'autres personnes installent quelque chose qui n'est pas installé par défaut, juste pour le tester. Et stdout devrait également rester intercalé avec stderr.

exemple simplifié:

./testFoo || echo execution failed 

./testBar && echo expected failure 

(./testBaz && (./testBaz 2>&1 | cmp -s - foo.tst && (./testFoo && echo and so on 
    || echo testFoo's execution failed)|| echo testBaz's does not match ) 
    || echo testBaz's execution failed 

mon testeur actuel ressemble à ceci (pour un test):

\#!/bin/bash 
compiler1 $1 && (compiler2 -E --make $(echo $1 | sed 's/^\(.\)\(.*\)\..*$/\l\1\2/') && (./$(echo $1 | sed 's/^\(.\)\(.*\)\..*$/\l\1\2/') || echo execution failed) || less $(echo $1 | sed 's/^\(.\)\(.*\)\..*$/\l\1\2/').err) || echo compile failed 
+0

Merci d'avoir répondu, je vais garder cela à l'esprit. En attendant, j'ai trouvé un framework de test de makefile, que je vais vérifier s'il fait ce que je veux. – Jean

Répondre

1

Je vous suggère de commencer à chercher des modèles ici. Par exemple, vous pouvez utiliser le nom de fichier en tant que modèle, puis créer des fichiers supplémentaires qui encodent le résultat attendu.

Vous pouvez ensuite utiliser un script simple pour exécuter la commande et vérifier le résultat (au lieu de répéter le code de test encore et encore).

Par exemple, un fichier testFoo.exec avec le contenu 0 signifie qu'il doit réussir (ou au moins le retour à 0) alors que testBar.exec contiendrait 1.

textBaz.out contiendrait alors la sortie attendue. Vous n'avez pas besoin d'appeler testBaz plusieurs fois; vous pouvez rediriger la sortie dans le premier appel, puis regarder $? pour voir si l'appel a réussi ou non. Si c'est le cas, vous pouvez vérifier directement la sortie (sans redémarrer la commande).

0

Mon harnais de test simple d'esprit fonctionne comme ceci:

  • chaque test est représenté par un script bash avec une extension .test - ces vivent tous dans le même répertoire

  • lorsque je crée un test, je lance le script de test et examine la sortie attentivement, si elle semble bien, il va dans un répertoire appelé good_results, dans un fichier avec le même nom que le test qui l'a généré

  • Le script de test principal trouve tous les scripts .test et les exécute chacun à son tour, produisant un fichier de sortie temporaire. Ceci est diff'd avec le fichier correspondant dans le répertoire good_results et toutes les différences indiquées

Itv m'a pris environ une demi-heure pour écrire cela et le faire fonctionner, mais il a prouvé une valeur inestimable!

Questions connexes