Execute testes de unidade no IntelliJ IDEA de vários módulos juntos

89

Como posso executar todos os testes de dois ou mais módulos IDEA de uma vez?

Estou usando muitos módulos e é importante executar todos os testes de unidade com frequência e quando eu escolho mais de uma pasta para executar, não há mais a opção 'executar' no menu de contexto.

Wojtek Erbetowski
fonte

Respostas:

115

Melhor maneira: (editar após 3 anos)

Existe uma maneira ainda melhor de conseguir isso.

  1. Selecione o menu "Executar" → "Editar configurações ...". Clique no sinal de mais verde no canto superior esquerdo e selecione JUnit.

  2. Selecione "Tipo de teste" para "Padrão" e insira esta regexp exatamente como você a vê: ^(?!.*IT$).*$(ela começa com acento circunflexo ^e termina com dólar $). Este regexp diz: todos os testes que não terminam com TI em seu nome .

  3. Selecione "Pesquisar testes" para "Em todo o projeto". O diretório de trabalho deve ser definido como o diretório de trabalho do módulo superior (deve ser definido por padrão).

  4. Digite um nome para o seu teste, como "Todos os testes de unidade". Também prefiro marcar a opção "Compartilhar" para que esta configuração não desapareça mais tarde. Clique em Aplicar e em OK.

Você pode experimentar esta regexp para atender às suas necessidades.

Resposta original:

É factível, embora não seja confortável.

  1. Selecione o primeiro módulo, clique com o botão direito no test/javadiretório e em "Executar todos os testes". Ele cria uma configuração de teste.
  2. Selecione "Editar configurações" e marque "Compartilhar" na configuração recém-criada para que ela seja salva.
  3. Selecione o segundo módulo, "Executar todos os testes" nele e marque "Compartilhar" também nesta configuração.
  4. Na seção "Antes do lançamento", clique em "+" e selecione "Executar outra configuração" e, em seguida, selecione a configuração do primeiro módulo.

Desta forma, você executa as configurações em uma sequência e cada configuração recebe uma nova guia. Ainda assim, melhor do que nada.

Tomasz Kalkosiński
fonte
Obrigado! De longe a maneira mais limpa. Querendo saber se há alguma maneira melhor de conseguir isso depois de 3 anos :)
CoderSpinoza
Obrigado! Você economizou meu tempo e esta ainda é de longe a maneira mais inteligente que posso encontrar para resolver a geração de relatórios de cobertura múltipla e o problema do corredor de caso unificado de uma só vez .
Fei
Acabei de editar meu anser com uma solução melhor @CoderSpinoza
Tomasz Kalkosiński
11
A versão atualizada não é tão boa , se seus casos de teste usam recursos específicos do módulo durante seu tempo de execução - ainda prefiro a solução original.
Fei,
Como faço para que essa configuração respeite minhas dependências do Gradle? Agora, ele falha na falta de aulas do Guava. Ao executar os testes de um único módulo, ele funciona bem.
Jorn de
22

Você deve criar uma "Configuração de execução":

  1. Vá para o menu suspenso no topo, à direita do botão "Criar" e clique nele
  2. Selecione "Editar configurações"
  3. Agora clique no botão "+" para adicionar uma nova configuração de execução e selecione JUnit
  4. Então, ao configurar o "Run Configuration", você encontrará um menu suspenso "Test Kind", selecione "All classes in directory"
  5. Selecione o diretório que deseja usar como raiz, você pode escolher o diretório de nível superior para seu projeto ou qualquer um dos diretórios para seus módulos.
  6. Selecione o módulo IntelliJ de onde pegar o caminho de classe (pode ser o projeto de nível superior se tiver um caminho de classe)
Alonso Dominguez
fonte
Obrigado pela dica, embora não resolva o problema. A maneira perfeita seria selecionar vários dirs, não apenas um. A solução pertial é usar padrões, mas ainda pode apenas padronizar o pacote, não os dirs ...
Wojtek Erbetowski
15
Em "Test Kind" escolha "All in package" e, em seguida, selecione a caixa de seleção "In Whole project". Isso executará testes em todos os módulos.
Martin Odhelius
5
Eu gostaria que cada módulo rodasse com seu próprio diretório de módulo como o diretório de trabalho - isso não parece ser possível, parece usar um único diretório de módulo para a coisa toda.
bacar
@MartinOdhelius essa é a solução mais limpa até agora
Hemil
10

Selecione todos os módulos, clique com o botão direito neles e opte por executar todos os testes. Isso criará uma configuração chamada "Whole Project", que você pode executar novamente a qualquer momento.

Achei isso melhor do que a resposta aceita porque executa os testes de unidade separadamente para cada módulo. Se seus casos de teste usam recursos específicos do módulo durante seu tempo de execução, a melhor maneira da resposta aceita não funcionará.

Selecione todos os módulos

Selecione todos os módulos

Clique com o botão direito e escolha executar todos os testes

Clique com o botão direito e escolha executar todos os testes

Obtenha uma nova configuração de execução

Obtenha uma nova configuração de execução

Dave Thomas
fonte
Basta selecionar mais de um módulo na primeira etapa.
user7610
2
Em minha opinião, essa deve ser a resposta aceita. A única reserva que tenho é o uso do termo "mais fácil". Infelizmente, não há nada fácil em executar configurações com Intellij. Existem muitas maneiras de realizar tarefas simples com configurações e geralmente apenas uma, se houver alguma, funciona. Portanto, sua tarefa geralmente é iterar por meio de todas as diferentes opções em busca da que funcione. Não é nada fácil.
David Sackstein
Isso executa todos os testes do projeto (Projeto inteiro), embora eu esteja selecionando uma pequena fração dos módulos. Não é isso que eu quero. No meu caso, todos os módulos para os quais desejo executar testes compartilham um pacote comum, então posso editar a configuração 'Projeto inteiro' resultante e adicionar o Pacote, que filtra para executar o teste apenas para o subconjunto de módulos.
Albert Vila Calvo
5

Para mim, as duas soluções não funcionaram ou não funcionaram como o esperado.

Para mim, tenho 3 módulos. As dependências dos meus módulos são assim

Apresentação -> Domínio -> Dados

Eu só queria executar todos os testes juntos. Então eu vim com a abordagem 'Across module dependencies'

Minhas configurações são assim:

insira a descrição da imagem aqui

Langusten Gustel
fonte
2

Isso funcionou para mim para um projeto com vários módulos.

Crie uma nova configuração de execução / depuração JUnit. Tipo de teste: 'Tudo no pacote' Pesquisar testes: 'Projeto inteiro'

Você também terá que especificar um diretório de trabalho.

Dan
fonte
Foi o que acabei fazendo também.
miva2
1

Outro caso não tão óbvio é quando a cobertura de código é necessária em mais de um projeto. A solução ingênua seria selecionar vários projetos e executar todos os testes de unidade de uma vez. Acontece que os testes de unidade podem falhar se o caminho de classe mudar e o IntelliJ tiver exatamente uma entrada de caminho de classe por configuração de execução. Nesse caso, executar testes de unidade em projetos sequencialmente é suficiente. Isso porque, no final de cada execução, o IntelliJ (2017.2.5 Community Edition) pergunta se a cobertura coletada deve substituir ou ser adicionada às estatísticas de cobertura coletadas anteriormente.

gabor
fonte