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 -

War es hilfreich?

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;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top