Eu tenho meu script de notas configurado. Quando executo a compilação Gradle, tudo está funcionando e ele executa os testes do jUnit.
Depois disso, quando executo o teste Gradle, recebo o seguinte:
C:\Users\..\..\Project>gradle test
:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:compileTestJava UP-TO-DATE
:processTestResources UP-TO-DATE
:testClasses UP-TO-DATE
:test UP-TO-DATE
Quando eu executo gradle clean
, a construção do Gradle funciona, é claro ... Eu quero poder redefinir apenas os testes, não o projeto inteiro: como devo fazer isso?
java
gradle
build.gradle
USer22999299
fonte
fonte
Respostas:
Uma opção seria usar o
--rerun-tasks
sinalizador na linha de comando . Isso executaria novamente toda a tarefa de teste e todas as tarefas das quais depende.Se você estiver interessado apenas em executar novamente os testes, outra opção seria fazer com que o gradle limpe os resultados dos testes antes de executá-los. Isso pode ser feito usando a
cleanTest
tarefa.Alguns antecedentes - o plug-in Java define tarefas limpas para cada uma das outras tarefas. De acordo com a documentação :
Portanto, tudo o que você precisa para executar novamente seus testes é também executar a
cleanTest
tarefa, ou seja:gradle cleanTest test
fonte
gradle cleanTest test
não executa novamente os testes, limpa a saída, mas atest
tarefa ainda obtém os resultados do cache - consulte github.com/gradle/gradle/issues/9153--no-build-cache
, funcionará como esperado, por exemplogradle cleanTest test --no-build-cache
.Outra opção seria adicionar o seguinte em seu build.gradle:
fonte
funcTest
tarefa que criei para executar testes funcionais.upToDateWhen
pode ser usado de qualquer maneira "code-driven", como propriedades do sistema, variáveis de ambiente propriedades do projeto, etc.gradle test -Prerun-tests
. Código no build.gradle:if(project.hasProperty("rerun-tests")) { test.outputs.upToDateWhen {false} }
gradle test --rerun-tasks
Fonte: https://gradle.org/docs/current/userguide/gradle_command_line.html
fonte
Esse foi recentemente o tópico na postagem do blog de Gradle. Pare de executar novamente seus testes . O autor mostra um exemplo usando
outputs.upToDateWhen { false }
e explica por que está errado:Em seguida, o autor continua explicando por que executar novamente alguns testes é uma perda de tempo:
Nos poucos casos em que você deseja executar novamente os testes nos quais o código não foi alterado, você deve modelá-los como uma entrada. Aqui estão os dois exemplos da postagem do blog que mostram a adição de uma entrada para que a tarefa a use durante suas verificações atualizadas.
Eu recomendo a leitura de todo o post do blog.
fonte
Aqui está uma solução usando o arquivo "build.gradle", caso você não queira modificar sua linha de comando:
E aqui está a saída. Observe 2 alterações em relação à saída anterior:
1) Uma nova tarefa 'cleanTest' aparece na saída.
2) 'teste' é sempre limpo (ou seja, nunca 'ATUALIZADO'), por isso é executado sempre:
fonte
cleanTest
anteriortest
não executará novamente os testes, mas limpará a saída, mas a tarefa de teste ainda obterá os resultados do cache - consulte github.com/gradle/gradle/issues/9153--rerun-tasks
funciona, mas é ineficiente, pois executa novamente todas as tarefas.cleanTest
por si só pode não ser suficiente devido ao cache de compilação.portanto, a melhor maneira de fazer isso é:
fonte
Além disso, ter que adicionar
--rerun-tasks
é realmente redundante. Isso nunca acontece. Crie um--no-rerun-tasks
e torne-o--rerun-tasks
padrão quandocleanTask
fonte
TL; DR
fonte
Eu acho que essa é uma pergunta válida, uma vez que é possível em Gradle executar este comando
test
, e o que acontece é que nada acontece!Mas eu questionaria a necessidade de fazer isso, como Jolta disse em seu comentário: se nenhum código foi alterado, por que você precisa testar novamente? Se você tiver dúvidas sobre a entrada de terceiros, eu diria que você precisa atender a isso no código do aplicativo. Se você tem medo de que seu código seja "esquisito", ou seja, capaz de passar em todos os testes pela primeira vez, mas não uma segunda (ou centésima vez), você não precisa pensar por que tem essas dúvidas e resolvê-las?
Pessoalmente, acho que isso é uma falha de design (muito menor) em Gradle: se tudo estiver completamente atualizado, em vez de se tornar "CONSTRUÍDO COM SUCESSO", deve dizer "SEM MUDANÇA DESDE O ÚLTIMO CONSTRUÇÃO COM SUCESSO: NADA FAZER".
fonte