Вопрос

Как лучше всего реализовать утверждения используете Progress 4GL или WebSpeed?

Это было полезно?

Решение

После некоторого рассмотрения вот мое решение проблемы. Он работает исходя из предположения, что среда разработки propath отличается от тестовой и производственной сред, а код всегда перекомпилируется для тестирования или производственного использования:

&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

Код разработан для предотвращения любых побочных эффектов и одинаково хорошо работает в любой среде исполнения (GUI или ChUI, WebSpeed, AppServer, пакетная обработка и т. д.).

1) Сохраните код в виде файла с именем & # 8220; assert & # 8221; (без каких-либо расширений).

2) Поместите файл в каталог, на который указывает PROPATH.

3) Пример использования:

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

В качестве вариации & # 8217; можно полностью отказаться от использования propath, если в тестовой и производственной среде есть только пустой включаемый файл, версия для разработки станет просто:

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

Дополнительным советом является добавление автотекстового макроса в выбранный вами редактор, который автоматически развернется в {assert}.

Другие советы

Поскольку у Progress нет встроенной обработки утверждений, но лучше всего я придумал следующее:

IF NOT <assertion> THEN
RUN assertionFailed.p.

assertionFailed.p может отправить электронное письмо программисту или зарегистрировать условия, а также выйти из программы.

Учитывая, что утверждения обычно исключаются из окончательного кода, я бы предложил путь с препроцессором.Вы можете сделать что-то вроде следующего: настроить его как два включаемых файла.При компиляции в рабочую среду убедитесь, что файл debugalert.i пуст.Assert.i можно редактировать, чтобы делать все, что вам нравится: сообщение, остановку, электронную почту и т. д.

Чтобы настроить утверждение, вам просто нужно следовать формату {assert.i &condition=}


/* assert.i */ {debugalert.i}

&IF DEFINED( DEBUGALERT ) <> 0 &THEN

ЕСЛИ НЕТ {&CONDITION} ЗАТЕМ ВЫПОЛНИТЕ:

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

КОНЕЦ.

&ENDIF


/* debugalert.i в среде тестирования или разработки Чтобы отключить утверждения, удалите это утверждение */

&GLOBAL-DEFINE DEBUGALERT


/* В вашем тестовом коде вы должны сделать следующее: / / утверждение тестирования */

DEF VAR h_ct AS INT NO-UNDO INIT 10.

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

OpenEdge 11.6 представил модульное тестирование в мире ABL. Это свободно основано на принципах JUnit. Поэтому утверждения теперь являются частью пакета. Дополнительная информация содержится в документации: https://documentation.progress.com/output/ua/OpenEdge_latest/index.html#page/pdsoe/overview-of-ablunit-testing-framework.html

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top