2010-12-01 13 views
4

私は、これらのテストのいずれかが凍結すると私の全体のテストスイートがハングします時折、私のテストスイートを実行するために使用するAntタスクのセットを持っています。私は優雅にはCtrl +Cアリがシャットダウンを打ったときにシャットダウンハンドラを追加し、私に実行していないとしてマークされた最終テストでレポートを与えます。これは私のシャットダウンフックが呼び出されていないWindows上を除いて素晴らしい作品(これらは統合テストであり、時間のために実行することができますので、これは重要です)。どのような種類の入力にも対応し、正常なシャットダウンを行う方法はありますか?Antビルドシャットダウン - CtrlキーC

答えて

2

long-running known issueあるようです。

問題は、あなたが子供のVMに伝播しない、観察していると、Windows上でAntのはCtrl +Cは、ということです。考えられること:

  • テストを細かく分割して、timeoutを使用して、ハングするものをすべて削除します。これは、ハングする1つのテストに失われたデータを制限します。
  • テスト実行時に、シャットダウンの「シグナル」(おそらくフラグファイルの存在)を待つ「リスナー」スレッドを追加し、ハングアップするとコンソールからのコマンドでAntによってそのシグナルが設定されるように調整しますが検出される。

これは複雑に見えますが、ショット価値があるかもしれません。 Ant parallelinputタスクを組み合わせて1つのスレッドでテストを実行し、2番目のスレッドでコンソールからの入力を待つ必要があります。アボートが選択されると、シグナルファイルが書き込まれます。これはテスト実行のリスナーで検出され、終了します。他の入力があれば、ランのクリーンな終了につながります。これに伴う問題は、テストが正常に完了した場合、あなたはAntがユーザーの入力を待って残っている、ということですが、そのための場所で、全体的なタイムアウトを置くことができます。 (私はテスト実行コードは、信号のファイルを検出する方法の例を与えられていませんでした。)

擬アリ:

<property name="signal.abort" value="stop.txt" /> 
<target name="runner"> 
    <delete file="${signal.abort}" /> 
    <parallel timeout="86400000"> 
     <sequential> 

      <!-- run tests here --> 

     </sequential> 
     <sequential> 
      <input validargs="y,n" 
        message="Abort the test (y/n)?" 
        addproperty="abort.test" /> 
      <condition property="do.abort"> 
       <equals arg1="y" arg2="${abort.test}"/> 
      </condition> 
      <ant target="terminator" /> 
     </sequential> 
    </parallel> 
</target> 

<target name="terminator" if="do.abort"> 
    <echo message="abort" file="${signal.abort}" /> 
</target> 
関連する問題