Suite peut être étendu dynamiquement cxxtest à temps courir?
-
04-10-2019 - |
Question
Je tiens à ma dynamique CxxTest Suite avec des articles de test supplémentaires, mais je le trouve que tous les scenerios tests doivent être disponibles (codées en dur) au moment de la compilation.
Mon scénario est que j'ai une classe C ++ assez volumineux qui a plus de 20 méthodes à tester. Cette classe doit être testé pour plus de 40 différents ensembles de données. Ces ensembles de données sont obtenues par le constructeur de la classe, contrôlée par les paramètres.
Mon objectif principal est d'éviter de réécrire les mêmes 20 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 il suffit de créer différents accessoires pour la même suite de tests.
Q1) Comment peut-on dynamiquement (à l'exécution) ajouter d'autres tests à la suite de tests?
Q2) Peut-on ajouter dynamiquement des appareils lors de l'exécution? Y at-il une meilleure suite de tests qui permet de luminaires dynamiques?
Q3) Est-ce quelque chose que la technique TDD évite? Quelqu'un at-il un bon résumé de la technique TDD.
Merci,
- J Jorgenson -
La solution
Il n'y a pas vraiment moyen direct 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
. Elle trouve aussi des descendants de TestSuite
et génère du code pour instancier chacun une fois. Vous pouvez écrire une fonction createSuite
sur chacune de vos suites de test pour passer des paramètres au constructeur de la suite, mais vous êtes toujours limité à retourner un seul objet.
vous pouvez modifier la configuration de votre build pour appeler le programme de test 40 fois différentes, le passage d'un autre paramètre sur la ligne de commande à chaque fois. La ride dans 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 et appelle ensuite le coureur de test normal après. 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 l'utilisation l'option --template
pour générer votre programme de test .
Mais aussi longtemps que vous écrivez votre propre main
, vous pouvez essayer de l'analyse syntaxique votre fichier ensemble de données là aussi, puis en appelant plusieurs fois le coureur de test. 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;
}