我有一个工作进程处理数据队列。 training 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函数的调用永远不会返回(因为worker应该连续运行)。在这种情况下,我不应该为它编写单元测试吗?如果是,我如何编写一些其他形式的测试来确保工作人员按照需要工作?
答案 0 :(得分:0)
您可能希望从代码中删除join,或者从测试用例中启动新线程,这将为您启动worker。
显然你需要终止工作者的方式,对于版本看起来像
public void stopWorker() {
workerThread.interrupt()
}
因此您需要将 workerThread 本地值转换为字段,并使其易失性。