AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Open Component Test Framework (OpenCTF) 1.4.3 - VCL Tests dynamisch erstellen
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von mjustin · begonnen am 24. Jan 2012 · letzter Beitrag vom 4. Feb 2012
Antwort Antwort
mjustin
Registriert seit: 14. Apr 2008
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

Geändert von mjustin ( 5. Feb 2012 um 10:09 Uhr)
 
Benutzerbild von Stevie
Stevie

 
Delphi 10.1 Berlin Enterprise
 
#2
  Alt 24. Jan 2012, 12:47
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.
Stefan
  Mit Zitat antworten Zitat
mjustin

 
Delphi 2009 Professional
 
#3
  Alt 24. Jan 2012, 13:17
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.
Michael Justin

Geändert von mjustin (24. Jan 2012 um 13:21 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

 
Delphi 10.4 Sydney
 
#4
  Alt 24. Jan 2012, 13:18
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.
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

 
Delphi 10.1 Berlin Enterprise
 
#5
  Alt 25. Jan 2012, 09:18
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.
Stefan
  Mit Zitat antworten Zitat
mjustin

 
Delphi 2009 Professional
 
#6
  Alt 4. Feb 2012, 16:26
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
Michael Justin

Geändert von mjustin ( 5. Feb 2012 um 10:07 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:32 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