Pregunta

¿Cuál es la mejor manera de implementar aserciones usando Progress 4GL o WebSpeed?

¿Fue útil?

Solución

Después de algunas consideraciones aquí está mi solución al problema. Funciona basándose en el supuesto de que la propagación del entorno de desarrollo es diferente de los entornos de prueba y producción y el código siempre se vuelve a compilar para uso de prueba o producción:

&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

El código está diseñado para evitar cualquier efecto secundario y funciona igualmente bien en cualquier entorno de ejecución (GUI o ChUI, WebSpeed, AppServer, lote, etc.).

1) Guarde el código como un archivo llamado & # 8220; afirme & # 8221; (sin ninguna extensión).

2) Coloque el archivo en un directorio señalado por PROPATH.

3) Ejemplo de uso:

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

Como variación, & # 8217; es posible evitar depender completamente de la propagación al tener solo un archivo de inclusión vacío en el entorno de prueba y producción, la versión de desarrollo será simplemente:

&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).

Un consejo adicional es agregar una macro de texto automático a su editor de elección que se expandirá automáticamente a {afirmar}.

Otros consejos

Dado que Progress no tiene un manejo nativo para las aserciones, pero lo mejor que he encontrado es:

IF NOT <assertion> THEN
RUN assertionFailed.p.

afirionFailed.p puede enviar un correo electrónico al programador o registrar las condiciones y también salir con gracia.

Dado que las afirmaciones generalmente se omiten del código final, sugeriría la ruta del preprocesador. Puede hacer algo como lo siguiente configurarlo como dos archivos de inclusión. Cuando lo esté compilando para producción, asegúrese de que debugalert.i esté vacío. afirmar.i podría ser editado para hacer lo que quiera mensaje, detener, correo electrónico, etc ...

Para configurar una aserción, simplemente debe seguir el formato {afir.i & amp; condition =}


/ * afirmar.i * / {debugalert.i}

& amp; SI ES DEFINIDO (DEBUGALERT) < > 0 & Amp; ENTONCES

SI NO {& amp; CONDICIÓN} ENTONCES HAGA:

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

FIN.

& amp; ENDIF


/ * debugalert.i en entornos de prueba o desarrollo    para desactivar las afirmaciones, elimine esta declaración * /

& amp; DEPURACIÓN DE DEFINICIÓN GLOBAL


/ * En su código de prueba, simplemente haría lo siguiente: / / afirmación de prueba * /

DEF VAR h_ct COMO INT NO-UNDO INIT 10.

{afirmar.i & amp; CONDITION = " h_ct = 8 "}

OpenEdge 11.6 introdujo Unit Testing en el mundo de ABL. Se basa libremente en los principios de JUnit. Por lo tanto, las afirmaciones ahora son parte del paquete. Más información está en la documentación: https://documentation.progress.com/output/ua/OpenEdge_latest/index.html#page/pdsoe/overview-of-ablunit-testing-framework.html

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top