Arquitetura para testes de tarefa em background

Tenho num sistema uma funcionalidade do usuário “montar” um relatório, dizendo o que quer de gráficos e outras informações. Então tenho um domain Relatorio que representa um modelo de relatório montado por um usuário, e este domain tem uma começão de ElementoRelatorio, que representam os elementos que devem compor este relatório.

Dependendo da quantidade de informações para processar, e do numero de elementos a geração do relatório propriamente dito, para ser apresentado ao usuário, pode levar alguns segundos até um minuto, então o processo precisa ser em background. Além disso, a apresentação pode ser numa página html dentro do site, ou pdf ou docx. Como a geração é custosa, eu não gerar um relatório do zero toda vez que o usuário quiser num formato diferente então quando o usuário manda “gerar” um relatório, o que eu faço é mastigar todas as informações num json e persisto no banco, e na hora de renderizar em qualquer formato basta renderizar os dados já mastigados.

Estou tendo muita dificuldade em escrever testes para esta rotina de “mastigação de dados”. Consigo testar a nível de unidade as rotinas individuais de processamento para cada tipo de “elemento”, mas não o todo, principalmente por ser uma rotina em background.

O que me sugerem? Algum padrão, alguma forma de arquitetar isso para facilitar os testes, algum caso que posso tomar de exemplo?
Se necessario posso detalhar mais, talvez não tenha dado informações suficientes.

O projeto é em Grails 3