assertions - 实现断言进行中 4GL

标签 assertions progress-4gl webspeed

实现assertions 的最佳方式是什么?使用 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) 将代码保存为名为“assert”的文件(不带任何扩展名)。

2) 将文件放入 PROPATH 指向的目录中。

3) 示例用法:

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

作为一种变体,可以通过在测试和生产环境中只包含一个空的包含文件来完全避免依赖 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 }。

关于assertions - 实现断言进行中 4GL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/811198/

相关文章:

javascript - 防止通过后退按钮重新提交表单+刷新/重试

openedge - 如何在每个循环中导出文本文件?

openedge - 如何重新抛出进行中的捕获异常 4gl?

Rspec 和 watir-webdriver;断言元素不存在

c++ - 尝试创建属性表时 mfc 断言失败

types - 确定 var 是否为自定义类型

C++ Xcode 断言在发布中评估