2010-09-21 34 views
1

Je souhaite étendre dynamiquement mon CxxTest Suite avec des éléments de test supplémentaires, mais je trouve que tous les scénarios de test doivent être disponibles (codés en dur) au moment de la compilation.La suite cxxtest peut-elle être étendue dynamiquement au moment de l'exécution?

Mon scénario est que j'ai une classe C++ assez volumineuse qui a plus de 20 méthodes à tester. Cette classe doit être testée pour plus de 40 ensembles de données DIFFÉRENTS. Ces ensembles de données sont obtenus via le constructeur de classe, contrôlé via des paramètres.

Mon objectif principal est d'éviter de réécrire les 20 mêmes cas de test pour les différents ensembles de données. Je voudrais utiliser un fichier de contrôle qui contient la liste des ensembles de données et créer simplement des appareils différents pour la même suite de tests. Q1) Comment dynamiquement (lors de l'exécution) ajouter plus de tests à la suite de tests? Q2) Peut-on ajouter dynamiquement des appareils à l'exécution? Existe-t-il une meilleure suite de tests permettant des appareils dynamiques? Q3) Est-ce quelque chose que la technique TDD évite? N'importe qui a eu un bon résumé de la technique TDD.

Merci,

- J Jorgenson -

Répondre

1

Il n'y a pas vraiment de façon directe de le faire. Le nombre de tests est déterminé avant la compilation, lorsque vous exécutez cxxtestgen. Il analyse vos fichiers et trouve les noms de méthodes commençant par test. Il trouve également TestSuite descendants et génère du code pour instancier chacun une fois. Vous pouvez write a createSuite function sur chacune de vos suites de tests pour transmettre des paramètres au constructeur de la suite, mais vous êtes toujours limité à renvoyer un seul objet.

Vous pouvez modifier votre configuration de build pour invoquer le programme de test 40 fois différentes, en passant un paramètre différent sur la ligne de commande à chaque fois. La pliure de ce plan est que le main par défaut généré par CxxTest n'accepte pas les paramètres de ligne de commande. Vous devrez fournir votre propre implémentation qui vérifie les paramètres, puis appelle le lanceur de test normal par la suite. Quelque chose comme ceci:

std::string global_var; // check this in your test cases 
int main(int argc, char* argv[]) { // add parameter list 
    global_var = argv[1]; // read parameter list 
    return CxxTest::ErrorPrinter().run(); // standard CxxTest 
} 

Pour utiliser cette fonction, omettez l'option --error-printer lorsque vous exécutez cxxtestgen, ajoutez <CxxTest world> à la fin du fichier, et utiliser the --template option to generate your test program. Mais aussi longtemps que vous écrivez le vôtre main, vous pouvez aussi essayer d'y parser votre fichier de jeu de données, puis d'appeler le lanceur de test plusieurs fois. Quelque chose comme ceci:

int main() { 
    std::fstream dataset("datasetlist.txt"); 
    int result = 0; 
    while (std::getline(dataset, global_var)) 
    result += CxxTest::ErrorPrinter().run(); 
    return result; 
}