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 -

Était-ce utile?

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;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top