Pergunta

Qual é a melhor forma de implementar afirmações utilizando Progress 4GL ou WebSpeed?

Foi útil?

Solução

Depois de alguma consideração aqui é a minha solução para o problema. Ele funciona com base no pressuposto de que o ambiente de desenvolvimento PROPATH é diferente de ambientes e de código de teste e produção é sempre re-compilado para teste ou produção de utilização:

&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

O código é projetado para evitar quaisquer efeitos colaterais e funciona igualmente bem em qualquer ambiente de execução (GUI ou Chuí, WebSpeed, AppServer, lote e assim por diante).

1) Salvar o código como um arquivo chamado “assert” (sem qualquer extensão).

2) Coloque o arquivo em um diretório apontado pela PROPATH.

3) Exemplo de uso:

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

Como uma variação que é possível evitar depender PROPATH por completo, tendo apenas um vazio arquivo de inclusão no ambiente de teste e produção, a versão de desenvolvimento será apenas:

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

Uma dica extra é adicionar uma macro automática de texto para o seu editor de escolha que irá expandir automaticamente em {assert}.

Outras dicas

Desde Progress não tem manipulação nativo para afirmações, mas o melhor que eu vim acima com é:

IF NOT <assertion> THEN
RUN assertionFailed.p.

assertionFailed.p pode enviar o programador, ou entrar as condições e também sair normalmente.

Dado que as afirmações são geralmente omitido do código final eu sugiro a rota pré-processador. Que você pode fazer algo como o seguinte configurá-lo como dois arquivos de inclusão. Quando você está compilando isto a produção garantir que o debugalert.i está vazio. assert.i poderia ser editado para fazer o que quiser mensagem, stop, e-mail etc ...

Para configurar uma afirmação você teria apenas que seguir o formato {assert.i & condição =}


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

& se definido (DEBUGALERT) <> 0 & THEN

SE NÃO {& CONDIÇÃO} Em seguida, faça:

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

FIM.

& ENDIF


/ * debugalert.i em ambientes de teste ou de desenvolvimento

para desligar as afirmações remover esta declaração * /

& GLOBAL-DEFINE DEBUGALERT


/ * Em seu código de teste você teria apenas que fazer o seguinte: / / testing afirmação * /

DEF VAR h_ct AS INT NO-UNDO INIT 10.

{assert.i & condição = "h_ct = 8"}

OpenEdge 11.6 introduziu Unidade de Teste para o mundo da ABL. É vagamente baseado em princípios JUnit. Afirmações são, portanto, agora parte do pacote. Mais informações está na documentação: https://documentation.progress.com/output/ua/OpenEdge_latest/index.html#page/pdsoe/overview-of-ablunit-testing-framework.html

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top