Kann CxxTest Suite zur Laufzeit dynamisch erweitert werden?
-
04-10-2019 - |
Frage
Ich möchte dynamisch meine CxxTest Suite mit zusätzlichen Prüflingen, aber sind zu finden, dass alle die Prüfung scenerios (hartcodiert) zum Zeitpunkt der Kompilierung verfügbar sein muß.
Mein Szenario ist, dass ich eine ziemlich sperrig C ++ Klasse habe, die mehr als 20 Methoden hat getestet werden. Diese Klasse muss für mehr als 40 verschiedenen Datensätzen getestet werden. Diese Datensätze werden über den Klassenkonstruktors erhalten, über die Parameter gesteuert.
Mein primäres Ziel ist es neu zu schreiben die gleichen 20 Testfälle für die verschiedenen Datensätze zu vermeiden. Ich möchte eine Steuerdatei verwenden, die die Liste der Datensätze enthält, und nur verschiedene Vorrichtungen für die gleiche Testsuite zu erstellen.
Q1) Wie funktioniert eine dynamisch (zur Laufzeit) mehr Tests auf die Test-Suite hinzufügen?
Q2) Kann man dynamisch Vorrichtungen zur Laufzeit hinzufügen? Gibt es eine bessere Test-Suite, die für dynamische Vorrichtungen erlaubt?
Q3) Ist das etwas, dass die TDD-Technik vermeidet? Jeder bekam eine gute Zusammenfassung der TDD-Technik.
Danke,
- J Jorgenson -
Lösung
Es gibt nicht wirklich einen direkten Weg, es zu tun. Die Anzahl der Tests wird vor bestimmten Zeit kompilieren, wenn Sie cxxtestgen
laufen. Es analysiert Ihre Dateien und findet Namen Methode mit test
beginnen. Es findet auch TestSuite
Nachkommen und generiert Code jedes Mal zu instanziieren. Sie können eine createSuite
Funktion auf jedem Ihrer Testsuiten Schreiben von Parametern an der Suite Konstruktor übergeben, aber Sie sind immer noch auf die Rückkehr nur ein Objekt beschränkt.
Sie können Ihren Build-Setup ändern Sie das Testprogramm 40 verschiedene Zeiten aufzurufen, einen anderen Parameter in der Befehlszeile jedes Mal vorbei. Die Falten in diesem Plan ist, dass die Standard main
durch CxxTest erzeugt nicht Befehlszeilenparameter akzeptieren. Sie müssen Ihre eigene Implementierung zur Verfügung zu stellen, dass die Kontrollen Parameter und dann später die normalen Testläufer aufrufen. So etwas wie folgt aus:
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
}
diese Funktion nutzen zu können, lassen Sie die --error-printer
Option, wenn Sie cxxtestgen
laufen, fügt <CxxTest world>
am Ende der Datei und Verwendung die --template
Option Ihr Testprogramm zu erzeugen.
Aber solange Sie Ihre eigene main
schreiben, könnten Sie Ihre Daten-Set-Datei dort versuchen, Parsen, auch, und dann den Test Läufer mehrmals aufgerufen wird. So etwas wie folgt aus:
int main() {
std::fstream dataset("datasetlist.txt");
int result = 0;
while (std::getline(dataset, global_var))
result += CxxTest::ErrorPrinter().run();
return result;
}