1

データキューで作業しているワーカープロセスがあります。Atraining workerは、からデータを読み取って処理しますtraining queue。ポーリングを続行し、キューに書き込まれた新しいデータを探します。

私は次のようにワーカーを実装しました:

public static void main(String[] args) {
  startTraining()
}

public static boolean startTraining() {
  trainingWorker = new WorkerImpl(config);
  final Thread workerThread = new Thread(trainingWorker);

  WorkerListener listener = new WorkerListener() {
    public void onEvent(WorkerEvent event, Worker worker, String queue, Job job, 
                        Object runner, Object result, Exception ex) {
      if(event.equals(WorkerEvnet.JOB_SUCCESS) {
        //get data
        //process data
        //send data
      }
    }
  }

  trainingWorker.addListener(listener, WorkerEvent.JOB_SUCCESS, WorkerEvent.JOB_FAILURE,
                     WorkerEvent.WORKER_ERROR, WorkerEvent.WORKER_POLL);
  workerThread.start();
  workerThread.join();
}

単体テストで、ワーカーがデータを正しく読み取り、正しく処理して、正常に送信したかどうかを確認したいと思います。問題はThread.join();のためです。main関数への呼び出しは決して戻りません(ワーカーは継続的に実行されると想定されているため)。この場合、単体テストを作成するべきではありませんか?はいの場合、ワーカーが希望どおりに機能していることを確認する他の形式のテストを作成するにはどうすればよいですか?

4

1 に答える 1

0

コードからjoinを削除するか、テストケースから新しいスレッドを開始してワーカーを開始することができます。

明らかに、ワーカーを終了する方法が必要になります。バージョンについては、次のようになります。

public void stopWorker() {
 workerThread.interrupt()
}

したがって、 workerThreadローカル値をフィールドに変換し、それを揮発性にする必要があります。

于 2012-10-12T14:44:00.000 に答える