2010-02-21 27 views
10

Wir haben ein großes Delphi-Projekt (1,5 Millionen Zeilen Code), und wir verwenden jetzt agile Prozesse.Erhalten von DUnit Test Coverage Stats mit FinalBuilder und AQTime

Wir haben bereits eine kontinuierliche Integrationsumgebung (FinalBuilder), die ich aktualisiert habe, um Komponententests (dUnit) und Code-Metriken (CodeHealer) in die E-Mails an alle in unserem Entwicklungsteam aufzunehmen. Unsere Unit-Testabdeckung ist nicht großartig, daher versuche ich jetzt, AQtime in den Mix für einige Testabdeckungsergebnisse für jeden Build zu integrieren.

Ich bin mit der „Programm ausführen“ Aufgabe, die Unit-Test-Datei auszuführen, die Ergebnisse zu protokollieren und die Datei anschließend zu analysieren. Ich beabsichtige, die Aufgabe "Script ausführen" zu verwenden, um AQtime (über COM) auszuführen und die Ergebnisse nach XML zu exportieren, damit ich diese Ergebnisse analysieren kann.

Das Problem, das ich habe, ist mit AQtime Ausführen der Komponententest ausführbar, ich verliere die Fähigkeit, die Unit-Test ausführbare Datei direkt zu überwachen. Ich möchte, dass FinalBuilder die Ergebnisse beider Aufgaben analysiert. Weiß jemand, wie er Zugriff auf die dUnit-Ergebnisse erhält, wenn er von AQtime aus aufgerufen wird?

Antwort

7

Wir haben diesen gleichen Weg liefen worden, und wir laufen nicht DUnit-Test aus AQTime,

Stattdessen erstellen und führen wir unsere Dunit-Tests mit FinalBuilder aus.

Unsere Komponententests verwenden XmlTestRunner, dann können wir wissen, ob der -Test fehlschlägt oder nicht sehr einfach eine XPath-Abfrage für die resultierende XML-Datei verwendet.

Aktualisierung: Ein kürzlich aktualisiertes Update für FinalBuilder 7.0 unterstützt jetzt DUnit. Es ist durch seine eigene XMLTestrunner.pas, die nach der Installation unter dem FinalBuilder-Verzeichnis ist. Dieser Runner gibt die Testergebnisse im gleichen Format wie NUnit aus. Es integriert sich dann wirklich gut in den FinalBuilder Server.

+0

Danke Robert. Die Version von dUnit, die in unserem Build war, hatte keinen XMLTestRunner. Ich habe dUnit 9.3 von sourceforge heruntergeladen und XMLTestRunner aus dem Contrib-Ordner gepackt. Hat alles, was ich wollte. – Catharz

+1

Catharz, du solltest eine Antwort annehmen, wenn sie für dich beantwortet wurde. –

2

Sie beschreiben das Setup, zu dem wir uns langsam entwickeln.

  • DUnit Tests werden als Konsolenanwendungen kompilierten die TTextTestListener definiert in TextTestRunner Einheit.
  • CI-Server ist ein Cmd-Skript, das alle Projekte erstellt und alle Tests ausführt.
  • Die Ausgabe der Tests wird an eine Datei weitergeleitet.

Eine Lösung könnte sein, diese Konsole Anwendungen haben AQTime Profil, während immer noch die Ergebnisse in eine Datei Rohr der Lage sein, die danach analysiert werden kann ?!

Ein andere Lösung könnte sein, Ihr eigenes Testlistener-Objekt zu implementieren und hat das Ziel, die Testergebnisse zu dem eventlog schreiben, direkt in einer Logdatei, eine Datenbank oder wo immer Sie wollen und hat dies durch Finalbuilder abgeholt.

Statt

Application.Initialize; 
    if System.IsConsole then TextTestRunner.RunRegisteredTests 
    else GUITestRunner.RunRegisteredTests; 

in Ihrer Projektdatei so etwas wie diese, die würde es so etwas wie diese

Application.Initialize; 
    if System.IsConsole then OurEventLogTestRunner.RunRegisteredTests 
    else GUITestRunner.RunRegisteredTests; 
+0

Danke für die Antwort Lieven. Ich versuchte AQtime zu bekommen, um die Ergebnisse der dUnit ausführbare Datei in eine Datei zu pipen, aber das hat nicht funktioniert. Ich habe auch einen eigenen TestListener implementiert, der ziemlich einfach aussah. Aber nach dem Blick auf den XMLTestRunner von dUnit 9.3 sah das noch einfacher aus. – Catharz

+0

Außerdem würde ich vorschlagen, dass Sie Ihren Code zu ändern: TextTestRunner.RunRegisteredTests (RxbHaltOnFailures) , so dass Sie einen Fehlercode <> 0 erhalten, wenn einige Test fehlschlägt. Hervorragend für die kontinuierliche Integration. – marius

+0

@marius: thx, das wusste ich nicht. Im Moment führen wir eine Grep-Suche in den Testergebnissen durch, um die Anzahl der Fehler/Fehler zu ermitteln. –