Fazendo o Maven executar todos os testes, mesmo quando alguns falham

243

Eu tenho um projeto com vários módulos. Quando todos os testes passam, o teste Maven executa todos eles.

Quando os testes falham no primeiro módulo, o maven não continuará no próximo projeto. Eu tenho testFailureIgnore definido como true nas configurações do Surefire, mas isso não ajuda.

Como faço para o maven executar todos os testes?

ripper234
fonte
Qual versão do maven-surefire-plugin?
Pascal Thivent

Respostas:

359

Na documentação do Maven Embedder :

-fae, --fail-at-end Falha na construção somente depois; permitir que todas as compilações sem impacto continuem

-fn, --fail-never NUNCA falhe na construção, independentemente do resultado do projeto

Portanto, se você estiver testando um módulo, poderá usá-lo com segurança -fae.

Caso contrário, se você possui vários módulos e deseja que todos sejam testados (mesmo aqueles que dependem do módulo de testes com falha), você deve executar mvn clean install -fn.
-faecontinuará com o módulo que possui um teste com falha (executará todos os outros testes), mas todos os módulos que dependem dele serão ignorados.

déspota
fonte
1
Além disso, você pode adicionar -e ao cmd para fornecer algumas informações de erro.
despot
11
Acabei de testar a opção --fail-never. O Maven não falhará na compilação, mesmo que haja erros de compilação. Se eu usar essa opção no Jenkins, a compilação parecerá bem-sucedida, mesmo se houver muitos erros de compilação. Prefiro -Dmaven.test.failure.ignore=trueneste caso e deixe Jenkins analisar os relatórios infalíveis.
fuemf5
@wlnirvana Eu editei a publicação agora com este link (sinta-se à vontade para excluir seu comentário ...)
Steve Chambers
93

Acabei de encontrar o parâmetro "-fae", que faz com que o Maven execute todos os testes e não pare em caso de falha.

ripper234
fonte
3
Infelizmente, esse parâmetro não funciona quando eu o passo para o TeamCity.
ripper234
4
Em um projeto com vários módulos, os módulos que dependem do módulo que falhou nos testes serão ignorados. Use -fn.
Hipokito 9/0318
2
@ ripper234 você encontrou uma maneira de fazê-lo funcionar no TeamCity?
Jeredriq Demas
86

Você pode testar com o surefire 2.6 e configurar o surefire com testFailureIgnore=true. Ou na linha de comando:

mvn install -Dmaven.test.failure.ignore=true
Pascal Thivent
fonte
16
Para o IIRC, o efeito de toda a compilação não falha, em vez de executar todos os testes e falhar no final.
Ondra Žižka
1
Esta é a única opção que funcionou para mim ... A opção "-fae" não fez nada de falhas nos testes
Yoi
38

Tente adicionar a seguinte configuração para o plugin surefire no seu pom.xml do projeto raiz :

<project>
  [...]
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <configuration>
          <testFailureIgnore>true</testFailureIgnore>
        </configuration>
      </plugin>
    </plugins>
  </build>
  [...]
</project>
nybon
fonte
17

Uma resposta rápida:

mvn -fn test

Funciona com compilações de projetos aninhados.

rustyx
fonte