How to cover executorService in junit test?

51 Views Asked by At

I need to write junit test for below code, I'm using executorService here and I don't know to write tests for that.

@PostConstruct
    public void init() {
        executorService = Executors.newFixedThreadPool(threadPool);
    }

public void processMessage(Message receivedMessage) {
        executorService.submit(() -> {
            try {
Uncovered code
                String threadName = Thread.currentThread().getName();
                log.info("Thread " + threadName);
                if (receivedMessage instanceof TextMessage) {
                    TextMessage textMessage = (TextMessage) receivedMessage;
                    String messageText = textMessage.getText();
                    restServiceConnector.postApiCallForRetry(messageText);
                    log.info("Received Message from Queue: " + messageText);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        });
    }
1

There are 1 best solutions below

0
RanAbitbul On BEST ANSWER

Assuming you do not want to test ExecutorService, you can extract your code to a package-private (no-modifier) function, which you could then test on it's own.

@PostConstruct
public void init() {
  executorService = Executors.newFixedThreadPool(threadPool);
}

public void processMessage(Message receivedMessage) {
  executorService.submit(() -> {
    try {
      myFunc(receivedMessage);
    } catch (Exception e) {
      e.printStackTrace();
    }
  });
}
  
void myFunc(Message receivedMessage){
  String threadName = Thread.currentThread().getName();
  log.info("Thread " + threadName);
  if (receivedMessage instanceof TextMessage) {
    TextMessage textMessage = (TextMessage) receivedMessage;
    String messageText = textMessage.getText();
    restServiceConnector.postApiCallForRetry(messageText);
    log.info("Received Message from Queue: " + messageText);
  }
}