2009-05-12 5 views
3

Je suis à la recherche d'un cadre de test pour introduire des tests automatisés pour a language without much test support. Pour autant que je puisse comprendre, j'ai besoin d'un framework capable d'exécuter les tests VDF en utilisant une forme de protocole. Je préférerais passer mon temps à écrire des tests plutôt que d'écrire du code VDF pour m'interfacer avec le framework de test, donc un protocole léger est préférable.Cadre de test pour [insérer la langue ici]

Slim with Fitnesse semble être un bon candidat, mais je suis intéressé par tous les recommandations. La possibilité d'utiliser le même cadre de test dans les langages de programmation serait un atout supplémentaire.

Répondre

4

Cela suppose que vous travaillez au niveau de l'API. Si je le lis mal, et que vous travaillez au niveau de l'interface graphique, vous êtes plus enclin à envisager quelque chose comme le sélénium ou watir. Avez-vous envisagé d'écrire votre propre cadre de test simple qui produise des résultats TAP (le protocole test quoi que ce soit) - puis l'analyse avec grind ou TAP2HTML?

Sérieusement, la sortie TAP ressemble à ceci:

 
1..7 
ok 1 - hello world with null value returns 'hello world' string 
ok 2 - hello world with bob returns 'hello, bob' 
ok 3 - hello world with 123 return 'hello, 123' 
ok 4 - hello world with 5K string return hello plus string 
ok 5 - special characters 
ok 6 - internationalization, fr 
ok 7 - internationalization, ja 
Looks like you failed 0 tests of 7. 

(Si elle est morte après l'étape 5, la 1..7 voulez-vous dire quelque chose qui ne va pas)

La sortie est ASCII droite. Vous avez essentiellement deux globals numTestsTotal et numTestExecuted, et écrire des fonctions comme ceci:

 
sub ok (boolean bExpected, string comment) { 
    if (bExpected) { 
    print "ok " . numTestsExecuted . " " . comment . "\n";  
    }else { 
    print "not ok" . numTeststotal . " " . comment . "\n"; 
    } 
    numTestsExecuted++; 
} 


sub eq(int iExpected, int iResult, string comment) { 
    if (iExpected==iResult) { 
    print "ok " . numTestsExecuted . " " . comment . "\n"; 
    } else { 
    print "not ok" . numTestsExecuted . " " . comment . \n"; 
    } 
    numTestsExecuted++; 
} 

Vous écrivez le code régulier dans une bibliothèque, votre application de test incluent la bibliothèque et le module de test.

Vous pouvez surcharger eq pour chaque type de valeur et d'écriture est de comparer les tableaux, etc.

Voir la documentation sur TAP: http://testanything.org/wiki/index.php/Main_Page

Et Test::More

Oui, on pourrait dire que eq() devrait "juste" appeler ok(). Ou vous pouvez insérer les résultats attendus et réels dans la sortie. Dépend de vous.

Quoi qu'il en soit, il existe de nombreux analyseurs et interpréteurs TAP pour les langages plus impératifs.

+0

Ouch. Matt, tu dois corriger ta mise en forme. –

Questions connexes