Frage

Was ist der beste Weg, Behauptungen mit Fortschritt 4GL oder WebSpeed?

War es hilfreich?

Lösung

Nach einiger Überlegung hier ist meine Lösung für das Problem. Es arbeitet auf der Annahme basiert, dass Entwicklungsumgebung PROPATH unterscheidet sich von Test- und Produktionsumgebungen und Code wird immer für Test- oder Produktions Verwendung erneut kompiliert:

&IF PROPATH MATCHES '*development*' &THEN 
&SCOPED-DEFINE ASSERTION   {1} {2} {3} {4} {5} {6} {7} {8} {9} {10} ~
{11} {12} {13} {14} {15} {16} {17} {18} {19} {20} ~
{21} {22} {23} {24} {25} {26} {27} {28} {29} {30} ~
{31} {32} {33} {34} {35} {36} {37} {38} {39} {40} ~
{41} {42} {43} {44} {45} {46} {47} {48} {49} {50} ~
{51} {52} {53} {54} {55} {56} {57} {58} {59} {60} ~
{61} {62} {63} {64} {65} {66} {67} {68} {69} {70} ~
{71} {72} {73} {74} {75} {76} {77} {78} {79} {80} 


 IF NOT ({&ASSERTION}) THEN 
     MESSAGE "Failed assertion {&ASSERTION} in" PROGRAM-NAME(1).

 IF ({&ASSERTION}) = ? THEN 
     MESSAGE "Unknown value as a result of assertion {&ASSERTION} in" 
              PROGRAM-NAME(1).

&ENDIF

Der Code ist so konzipiert, um Nebenwirkungen zu vermeiden, und funktioniert genauso gut in jeder Ausführungsumgebung (GUI oder Chui, WebSpeed, AppServer, Chargen- und so weiter).

1) Speichern Sie den Code als Datei mit dem Namen „assert“ (ohne Erweiterung).

2) Legen Sie die Datei in ein Verzeichnis, auf das PROPATH.

3) Verwendungsbeispiel:

{assert valid-handle(hProc)}
{assert i > 0 and i <= 100}
{assert cExtra begins ‘opt’}  /* note the single quotes */
{assert dtEnd > = dtStart}

Als eine Variante möglich, es ist völlig unter Berufung auf PROPATH zu vermeiden, indem nur ein leeren, die Include-Datei in Test- und Produktionsumgebung wird die Entwicklerversion wird nur:

&SCOPED-DEFINE ASSERTION   {1} {2} {3} {4} {5} {6} {7} {8} {9} {10} ~
{11} {12} {13} {14} {15} {16} {17} {18} {19} {20} ~
{21} {22} {23} {24} {25} {26} {27} {28} {29} {30} ~
{31} {32} {33} {34} {35} {36} {37} {38} {39} {40} ~
{41} {42} {43} {44} {45} {46} {47} {48} {49} {50} ~
{51} {52} {53} {54} {55} {56} {57} {58} {59} {60} ~
{61} {62} {63} {64} {65} {66} {67} {68} {69} {70} ~
{71} {72} {73} {74} {75} {76} {77} {78} {79} {80} 


 IF NOT ({&ASSERTION}) THEN 
     MESSAGE "Failed assertion {&ASSERTION} in" PROGRAM-NAME(1).

 IF ({&ASSERTION}) = ? THEN 
     MESSAGE "Unknown value as a result of assertion {&ASSERTION} in" 
              PROGRAM-NAME(1).

Eine zusätzliche Spitze ist ein Auto-Text-Makro Editor Ihrer Wahl hinzuzufügen, die in {assert} automatisch erweitert wird.

Andere Tipps

Da Fortschritt hat keine native Handhabung für Behauptungen, aber am besten ich habe kommen mit ist:

IF NOT <assertion> THEN
RUN assertionFailed.p.

assertionFailed.p kann der Programmierer eine E-Mail, oder die Bedingungen anmelden und auch anmutig verlassen.

Da die Behauptungen im allgemeinen aus dem letzten Code weggelassen ich die Präprozessor Route vorschlagen würde. Man könnte es so etwas wie die zwei Dateien enthalten eingerichtet Folgendes. Wenn Sie es bis zur Produktion kompilieren sicherzustellen, dass die debugalert.i leer. assert.i bearbeitet werden könnte, um zu tun, was Sie Mitteilung mögen, stoppen, E-Mail usw. ...

So richten Sie eine Behauptung Sie das Format nur folgen würde {assert.i & Bedingung =}


/ * assert.i * / {Debugalert.i}

& IF DEFINIERT (DEBUGALERT) <> 0 THEN

WENN NICHT {& ZUSTAND} THEN DO:

MESSAGE THIS-PROCEDURE:FILENAME "ERROR...{&CONDITION}" 
    VIEW-AS ALERT-BOX.
/* add code to email message etc.. or stop */

ENDE.

& ENDIF


/ * debugalert.i auf Test- oder Entwicklungsumgebungen    auszuschalten die Behauptungen entfernen Sie diese Anweisung * /

& GLOBAL-DEFINE DEBUGALERT


/ * In Ihrem Testcode, den Sie würde das nur tun folgendes: / / Test Behauptung * /

DEF VAR h_ct AS INT NO-UNDO INIT 10.

{assert.i & ZUSTAND = "h_ct = 8"}

Openedge 11.6 eingeführt Unit Testing in der Welt der ABL. Es ist lose auf JUnit Prinzipien basiert. Assertions sind daher jetzt Teil des Pakets. Weitere Informationen in der Dokumentation: https://documentation.progress.com/output/ua/OpenEdge_latest/index.html#page/pdsoe/overview-of-ablunit-testing-framework.html

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top