使用Progress 4GL或WebSpeed实现assertions的最佳方式是什么?正在执行断言4GL
回答
后一些考虑这是我的溶液解决问题。它的工作原理基于这样的假设开发环境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}。
由于进展不具有断言本地处理,但最好的我想出来的是:
IF NOT <assertion> THEN
RUN assertionFailed.p.
assertionFailed.p可以通过电子邮件发送的程序员,或登录的条件以及退出优雅。
鉴于断言通常从最终代码中省略,我建议预处理器路由。你可以像下面这样设置两个包含文件。在编译到生产环境时,请确保debugalert.i为空。 assert.i可以进行编辑,以做任何你喜欢的消息,停止,电子邮件等..
要设置断言你只要按照格式{assert.i &条件=}
/* assert.i */{ } debugalert.i
&如果定义(DEBUGALERT)<> 0 THEN &
IF NOT {& CO NDITION} THEN DO:
MESSAGE THIS-PROCEDURE:FILENAME "ERROR...{&CONDITION}"
VIEW-AS ALERT-BOX.
/* add code to email message etc.. or stop */
END。
& ENDIF
/*在测试或开发环境debugalert.i 关闭断言删除此声明*/
& GLOBAL-DEFINE DEBUGALERT
/*在您的测试代码中,您只需执行以下操作:/ /测试断言*/
DEF VAR h_ct AS INT NO-UNDO INIT 10.
{assert.i & CONDITION = “h_ct = 8”}
- 1. MSTest:断言线程执行
- 2. 断言函数被执行
- 3. 断言::在一行
- 4. 预定义库正在进行4GL
- 5. 正在进行的LOB的使用4GL
- 6. 图片上传正在进行中4gl
- 7. 断言(假)不停止执行
- 8. malloc.c“sYSMALLOC:断言”与C++项目执行
- 9. 爪哇断言禁用Map.remove的执行()
- 10. Informix中的值4gl语言
- 11. 如何在constexpr函数中执行运行时断言?
- 12. 正在修复sql长度错误正在进行中4gl 10.2B
- 13. 从rspec中断言断言与断言
- 14. 断言在Python单元测试中不执行函数
- 15. 如何在断言失败时执行动作
- 16. 在一次测试中执行多次断言 - soap ui
- 17. 在python断言后如何继续执行程序?
- 18. 捕捉UICollectionView在Swift中执行批量更新断言失败?
- 19. 我可以在pytest中执行多个断言吗?
- 20. Xunit:在一种测试方法中执行所有'断言'?
- 21. 在junit上执行easymock时断言错误
- 22. 如何在Python中执行断言自省
- 23. 蟒蛇正则式断言
- 24. QUnit,断言不正确?
- 25. 提高正在进行的几个运行时错误4GL
- 26. 中断vs中断执行
- 27. 断言在Java
- 28. 断言与JUnit断言
- 29. 保存断言在序言
- 30. 检查文件存在正在进行中4GL