Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   Open Component Test Framework (OpenCTF) 1.4.3 - VCL Tests dynamisch erstellen (https://www.delphipraxis.net/165965-open-component-test-framework-openctf-1-4-3-vcl-tests-dynamisch-erstellen.html)

mjustin 24. Jan 2012 07:47


Open Component Test Framework (OpenCTF) 1.4.3 - VCL Tests dynamisch erstellen
 
Open Component Test Framework (OpenCTF)


Ein open source Projekt zur automatischen Erstellung von Tests für alle Komponenten in VCL Formularen, Frames und Datenmodulen für Delphi 2009 und neuer.


OpenCTF kann bei großen Projekten, in denen viele VCL Komponenten eingesetzt werden, durch regelmäßige Tests eine sehr große Zeiteinsparung erreichen.

Es erfordert kein Scripting der Tests, sondern verwendet (erweiterbare) Regeln, die einmal definiert und auf alle passenden Komponenten angewandt werden. OpenCTF nutzt das DUnit Framework als Basis.


Projekt bei Sourceforge (mit Screenshot):
https://sourceforge.net/projects/openctf/

Screenshots:
https://sourceforge.net/projects/openctf/#screenshots

API Dokumentation:
http://openctf.sourceforge.net/

Getting Started - Englisch:
http://www.habarisoft.com/download/O...ingStarted.pdf

Einstieg - Deutsch:
http://www.habarisoft.com/download/E...gInOpenCTF.pdf

Wie arbeitet OpenCTF?
OpenCTF kennt nach der Initialisierung im Prinzip nur zwei einfache Dinge (zwei Objektlisten):
* die Liste der zu untersuchenden Formulare
* die Liste der durchzuführenden Tests

OpenCTF durchläuft nacheinander alle Komponenten der angegebenen Formulare, und prüft dabei, ob für die Klasse der Komponente (oder eine Vorfahrklasse) ein Test hinterlegt ist. Falls die Komponente diesen 'Aufnahmetest' besteht, wird dynamisch ein Testfall für das DUnit-Framework erzeugt und der Testsuite hinzugefügt. (Jeder Testfall enthält auch eine Objektreferenz auf die von ihm zu testende Komponente.)

Nachdem alle Testfälle feststehen, kann mit der DUnit-Standardmethode 'RunRegisteredTests' der eigentliche Testlauf gestartet werden. Da jeder Testfall die von ihm zu testende Komponente bereits 'kennt', ist in dieser Phase keine besondere Leistung des OpenCTF mehr erforderlich.

OpenCTF erleichtert die Testerstellung aber auch durch Methoden, die ein Testprojekt mit wenig Zeilen Code ermöglichen. Beispiel:

Delphi-Quellcode:
program Project1;

uses
  OpenCTF, OpenCTFRunner, // die Basis des Frameworks
  ctfTestDB,             // eine Sammlung von Tests für DB - Komponenten
  TestDataModule in 'TestDataModule.pas' {DataModule1: TDataModule},
  TestDataModule2 in 'TestDataModule2.pas' {DataModule2: TDataModule},
  TestForm in 'TestForm.pas' {Form1},
  TestForm2 in 'TestForm2.pas' {Form2};

begin
  // Register Form classes
  OpenCTF.RegisterFormClasses([TDataModule1, TDataModule2, TForm1, TForm2]);
  // run the tests
  OpenCTFRunner.Run;
end.
Eine neue Version (1.5.0) ist aktuell in Entwicklung und bereits im Subversion Repository verfügbar (im Bereich branches).

Highlights:

* komplett neues, flexibleres Basisframework
* Testergebnisse werden "verdichtet" (weniger Zweige im DUnit GUI Testrunner), um die DUnit Darstellung bei großen Projekten übersichtlicher zu machen
* Tests können wahlweise nach Forms oder nach Testklassen gruppiert werden, Teil-Testläufe werden dadurch flexibler und schneller

Stevie 24. Jan 2012 11:47

AW: Open Component Test Framework (OpenCTF) 1.4.3 - VCL Tests dynamisch erstellen
 
Mir erschließt sich der Nutzen und Einsatzzweck irgendwie noch nicht.

Bei einem Unittest teste ich in aller Regel - wie der Name schon sagt - eine Unit (bzw die enthaltenen Klassen und Routinen) soweit es geht in Isolation (oft unter Zuhilfenahme von Mocks).

Speziell bei Forms und anderen GUI Elementen stelle ich mir das etwas schwer vor, denn diese sind entweder komplett von der BI getrennt (was bei Delphi Entwicklern erfahrungsgemäß durch den RAD Ansatz nicht so verbreitet ist), was das Testen obsolet macht, oder sie sind dermaßen von anderen Teilen der Applikation abhängig, dass sich ein isoliertes Testen nahezu unmöglich gestaltet.

mjustin 24. Jan 2012 12:17

AW: Open Component Test Framework (OpenCTF) 1.4.3 - VCL Tests dynamisch erstellen
 
Zitat:

Zitat von Stevie (Beitrag 1147373)
Bei einem Unittest teste ich in aller Regel - wie der Name schon sagt - eine Unit

Zweifellos! OpenCTF "unit-testet" die Komponenten nicht, es testet ihre Properties gegen Regeln. Ein flexibles Testframework wie DUnit ist gut geeignet, auch ganz andere Arten von Softwaretests auszuführen, zum Beispiel Integrationstest.

Der Vorteil von OpenCTF liegt darin, dass man sich gegen einige häufig auftretende Fehler beim Bearbeiten von Delphi Formularen absichern kann. Nicht zugewiesene / versehentlich gelöschte Event-Handler zum Beispiel. ... Falls so etwas beim Einchecken in der Versionsverwaltung nicht erkannt wird, meldet OpenCTF es sofort beim nächsten Build/Test Lauf auf dem CI Server.

Bernhard Geyer 24. Jan 2012 12:18

AW: Open Component Test Framework (OpenCTF) 1.4.3 - VCL Tests dynamisch erstellen
 
Zitat:

Zitat von Stevie (Beitrag 1147373)
Mir erschließt sich der Nutzen und Einsatzzweck irgendwie noch nicht.

Bei einem Unittest teste ich in aller Regel - wie der Name schon sagt - eine Unit (bzw die enthaltenen Klassen und Routinen) soweit es geht in Isolation

Streich den Begriff Unittest und setzte dafür Integrations. Trifft es wohl eher als ein klassischer Unit-Test.

Stevie 25. Jan 2012 08:18

AW: Open Component Test Framework (OpenCTF) 1.4.3 - VCL Tests dynamisch erstellen
 
Ahh, alles klar, DUnit wird hier nur als Framework benutzt um eher "formale" Kriterien zu testen und nicht die Funktionalität an sich - gute Sache.

mjustin 4. Feb 2012 15:26

AW: Open Component Test Framework (OpenCTF) 1.4.3 - VCL Tests dynamisch erstellen
 
Die nächste Version 1.5 des Test Frameworks ist als erste "Alpha Version" nun auf Sourceforge:

https://sourceforge.net/projects/ope...s/openctf/1.5/

Screenshots:

https://sourceforge.net/projects/openctf/#screenshots

Highlights:

* komplett neues, flexibleres Basisframework
* Testergebnisse werden "verdichtet" (weniger Zweige im DUnit GUI Testrunner), um die DUnit Darstellung bei großen Projekten übersichtlicher zu machen
* Tests können wahlweise nach Forms oder nach Testklassen gruppiert werden, Teil-Testläufe werden dadurch flexibler und schneller


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:00 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz