2009-05-01 16 views

答えて

3

いくつかの考慮がここに私の解決策であり、後問題にそれは、常にテストや本番使用のために再コンパイルされている開発環境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}に展開される、選択したエディタに自動テキストマクロを追加することです。

1

進歩がアサーションをネイティブの取り扱いはありませんが、私が思い付くした最高ですので:

IF NOT <assertion> THEN 
RUN assertionFailed.p. 

assertionFailed.pは、プログラマを電子メール、または条件を記録しても正常に終了することができます。

1

通常、アサーションは最終コードから省略されているので、私はプリプロセッサのルートを提案します。次のようなことをすると、2つのインクルードファイルとして設定されます。実稼働環境にコンパイルするときは、debugalert.iが空であることを確認してください。 assert.iが...あなたがメッセージ、停止、電子メールなどを好きなように編集することができ、セットアップに

あなただけの形式たどるアサーション{assert.i &条件を=}


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

& IF DEFINED(DEBUGALERT)THEN <> 0 &

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

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

関連する問題