Die DUnitX-Test-Suite (StaticCodeAnalyserForm\tests\TestProject.dproj)
braucht zwei externe Komponenten. Ohne sie scheitert "Alle Projekte
erzeugen" mit F2613 Unit '...' nicht gefunden.
| Komponente | Pflicht | Zweck |
|---|---|---|
| DUnitX | Pflicht | Test-Framework (Assert/[Test]-Attribute/Runner) |
| TestInsight | Win32 optional | IDE-Integration (Tests-Panel, live-Status) |
Das eigentliche SCA-Engine + Standalone-EXE laufen unabhaengig — die Tests sind nur fuer Entwickler relevant. Wer nur den SCA bauen will, kann das TestProject im IDE-Build aushaengen (s. Workarounds unten).
cd D:\git-demos\delphi
git clone https://github.com/VSoftTechnologies/DUnitX.git dunitxIm TestProject.dproj ist der Pfad ..\..\..\dunitx\Source bereits in
DCC_UnitSearchPath eingetragen (Commit 3f1cab0). Andere Parent-
Directory? Pfad in der dproj entsprechend anpassen oder via Tools ->
Options -> Language -> Delphi -> Library global setzen (fuer Win32
und Win64 je separat).
Bevorzugt via GetIt Package Manager:
- RAD-Studio IDE -> Tools -> GetIt Package Manager
- Suche "TestInsight" -> Install klicken
- IDE-Neustart
GetIt setzt Library-Path und installiert das Plugin automatisch.
Falls GetIt-Eintrag nicht da: GitHub/Bitbucket nach
TestInsight Stefan Glienke durchsuchen, manuell clonen, die
TestInsight.RADxx.dpk kompilieren + installieren, dann Source/ zum
Win32-Library-Path adden.
| Build-Target | Plattform | Voraussetzung |
|---|---|---|
| SCA.Engine.bpl | Win32 + Win64 | rtl, nichts extern |
| SCA.SharedUI.bpl | nur Win32 | rtl, vcl, designide (IDE-only) |
| StaticCodeAnalyser.exe (Standalone) | Win32 + Win64 | nichts extern |
| StaticCodeAnalyser.IDE.bpl | nur Win32 | rtl, vcl, designide |
| TestProject.exe | Win32 + Win64 | DUnitX + (Win32: TestInsight) |
Die Group baut mit "Alle Projekte erzeugen" alle 5 Targets auf der aktuell gewaehlten Plattform.
Standard-Setup. Tests-Panel zeigt live Result, Click auf failing Test springt zur Assertion.
TestProject.exe als Standalone-Konsole laufen — DUnitX-Console-Logger
wird verwendet (siehe TestProject.dpr Z18-20):
".\Output\Tests\Win64 Release\TestProject.exe"Exit-Code 0 = alle gruen. Failures kommen als stdout + nunit-XML
neben der EXE (per DUnitX.Loggers.Xml.NUnit).
DUnitX-Command-Line nimmt Filter:
TestProject.exe --include:TTestUninitVar
TestProject.exe --exclude:TTestPerformanceWenn Tests gerade nicht relevant sind und nur SCA gebaut werden soll,
in IDE -> Projektgruppe rechtsklicken -> Build-Auftrag -> Haken bei
TestProject.dproj entfernen. "Alle Projekte erzeugen" ueberspringt
das Projekt dann.
Aequivalent direkt im .groupproj: Eintrag fuer TestProject auskommentieren.
Im TestProject.dproj ist der Define nur fuer Win32 aktiv (Z133):
<PropertyGroup Condition="'$(Base_Win32)'!=''">
<DCC_Define>TESTINSIGHT;$(DCC_Define)</DCC_Define>
</PropertyGroup>Win64-Build ueberspringt damit automatisch die TestInsight-Imports und braucht das Plugin nicht. Wer TestInsight gar nicht haben will, kann den Eintrag ersatzlos loeschen.
Mehrere Tests werfen absichtlich Exceptions (EFOpenError,
Exception, etc.) um Error-Handling zu verifizieren. Der IDE-Debugger
faengt sie ab und zeigt einen Dialog. Workaround:
- Im Dialog: Haken bei "Diesen Exception-Typ ignorieren" + Fortsetzen
- Dauerhaft: Run -> Run Without Debugging (
Strg+Shift+F9) statt F9 — der Debugger interveniert dann gar nicht - Selektiv: Tools -> Options -> Debugger Options -> Language Exceptions -> Exception-Klasse zur Ignore-Liste adden
Generic-Inference scheitert unter Win64 wenn untyped Int-Literal +
Integer kombiniert werden. Fix: expliziter Typ-Parameter
Assert.AreEqual<Integer>(N, X.Count). Bereits in 1209 Stellen der
Suite gepatcht (Commit 5f1661c). Bei neuen Tests beachten.
StaticCodeAnalyserForm\tests\TestProject.dproj— Test-Projekt-ConfigStaticCodeAnalyserForm\tests\TestProject.dpr— Test-Runner-CodeStaticCodeAnalyserForm\tests\uTest*.pas— die einzelnen Test-UnitsHowTo_AddDetector.md— wenn ein neuer Detektor + Tests anzulegen sindHowTo_DetectorSelftest.md— Dogfooding-Workflow fuer das SCA-EXE