有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java单元测试阻塞过程

我有一个工作进程处理数据队列。Atraining workertraining 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();对主函数的调用永远不会返回(因为假定辅助函数将连续运行)。在这种情况下,我不应该为它编写单元测试吗?如果是,我如何编写其他形式的测试以确保工人按预期工作


共 (1) 个答案

  1. # 1 楼答案

    您可能希望从代码中删除join,或者从测试用例中启动新线程,这将为您启动worker

    显然,您需要终止worker的方法,因为它可能看起来像

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

    因此,您需要将workerThread本地值转换为一个字段,并使其易变