### Question:
SeriesTaskExecutor implements TaskExecutor { @Override public synchronized void start() { if (initialised) { return; } try { processors = configuration.getProcessors(); } catch (DataLayerException e) { throw new RuntimeException(e); } taskQueues = new BlockingQueue[processors]; for (int ii = 0; ii < processors; ii++) { taskQueues[ii] = new LinkedBlockingQueue<Task>(configuration.getQueueSize()); } for (int ii = 0; ii < processors; ii++) { SeriesTaskExecutorThread processor = processorFactory.create(taskQueues[ii]); monitor.watchThread(poolService, processor); } debug("Created {0} Task Processors", processors); initialised = true; } @Inject  SeriesTaskExecutor(
            ExecutorService poolService,
            SeriesTaskExecutorThreadFactory processorFactory,
            ThreadMonitor monitor,
            CTSQueueConfiguration configuration,
            @Named(DataLayerConstants.DATA_LAYER_DEBUG) Debug debug); @Override void execute(String tokenId, Task task); @Override synchronized void start();  }### Answer:
@Test public void shouldStartTaskProcessorsWithThreadMonitor() throws Exception { int processors = 3; given(processorFactory.create(any(BlockingQueue.class))).willReturn(mock(SeriesTaskExecutorThread.class)); given(configuration.getProcessors()).willReturn(processors); executor.start(); verify(monitor, times(processors)).watchThread(any(ExecutorService.class), any(Runnable.class)); }