Tenho alguns testes de unidade Junit que requerem uma grande quantidade de espaço de pilha para serem executados - ou seja, 1G. (Eles testam a funcionalidade que consome muita memória para um aplicativo webstart que só será executado com espaço de heap suficiente e será executado internamente em máquinas Win 7 de 64 bits - portanto, redesenhar os testes não é uma sugestão prática).
Estou desenvolvendo no Intellij IDEA, então sei que posso definir os parâmetros JVM (por exemplo, -Xmx1024M) para a classe de teste. No entanto, isso é apenas para executar toda a classe de teste - se eu quiser executar um teste individual, tenho que recriar as configurações de execução para esse método de teste.
Além disso, são IDE e específicos para cada caixa - portanto, se eu alternar entre as caixas (desenvolvo em várias máquinas) ou um dos meus colegas tentar executar os testes, essas configurações não serão transferidas. (Além disso, outros IDEs como Eclipse e NetBeans são usados por meus colegas.) FWIW, estamos usando mercurial para controle de código-fonte.
Para o ciclo de construção, estamos usando o Maven, então sei como especificar os parâmetros JVM para isso.
Portanto: - Estou procurando uma maneira de especificar os parâmetros JVM que se aplicam a toda a classe de teste e aos métodos de teste individuais; e - Eu gostaria de compartilhar essas especificações entre IDEs em qualquer máquina (tendo obtido o código do repositório).
fonte
Respostas:
No IntelliJ, você pode especificar as configurações padrão para cada configuração de execução. Na caixa de diálogo de configuração Executar / Depurar (aquela que você usa para configurar o heap por teste), clique em Padrões e JUnit . Essas configurações serão aplicadas automaticamente a cada nova configuração de teste JUnit. Eu acho que uma configuração semelhante existe para o Eclipse.
No entanto, não há uma opção simples para transferir essas configurações (pelo menos no IntelliJ) entre ambientes. Você pode enviar arquivos de projeto IntelliJ para o seu repositório: pode funcionar, mas eu não o recomendo.
Você sabe como configurá-los
maven-surefire-plugin
. Boa. Esta é a forma mais portátil (veja a resposta de Ptomli para um exemplo).Para o resto - você deve se lembrar que os casos de teste JUnit são apenas um grupo de classes Java, não um programa independente. Cabe ao runner (que seja um runner JUnit autônomo, seu IDE,
maven-surefire-plugin
definir essas opções. Dito isso, não há uma maneira "portátil" de defini-las, de modo que as configurações de memória são aplicadas independentemente do runner.Para dar um exemplo: você não pode definir
Xmx
parâmetros ao desenvolver um servlet - cabe ao contêiner definir isso. Você não pode dizer: "este servlet sempre deve ser executado comXmx=1G
.fonte
No Maven você pode configurar o plugin infalível
Se você usar o Maven para compilações, essa configuração será carregada na árvore de origem e aplicada quando os testes forem realizados. Consulte a documentação do plug-in Maven Surefire .
fonte
-Xmx256M
que seja passado para a linha de comando Java ao executar seus testes de unidade diretamente do IntelliJ. Isso só me deixou confuso :-(Os parâmetros também podem ser definidos em tempo real.
Consulte http://www.cowtowncoder.com/blog/archives/2010/04/entry_385.html
fonte
De acordo com esta pergunta de suporte https://intellij-support.jetbrains.com/hc/en-us/community/posts/206165789-JUnit-default-heap-size-overridden-
o argumento -Xmx para uma execução de teste IntelliJ junit virá do plug-in maven-surefire, se estiver definido.
Este snippet pom.xml
parece passar o argumento -Xmx1024 para a execução de teste junit, com IntelliJ 2016.2.4.
fonte
Concordo com os outros que disseram que não existe uma maneira simples de distribuir essas configurações.
Para Eclipse: peça a seus colegas para definir o seguinte:
-Xmx1024m
Depois disso, todos os testes serão executados com,
-Xmx1024m
mas infelizmente você os configurou em todas as instalações do Eclipse. Talvez você possa criar um pacote Eclipse customizado que contenha essa configuração e fornecê-lo a seus colegas de trabalho.O seguinte processo de trabalho também pode ajudar: Se o IDE não puder executar um teste, o desenvolvedor deve verificar se o Maven pode executar esse teste ou não.
fonte
Você pode usar systemPropertyVariables (java.protocol.handler.pkgs é o nome do seu argumento JVM):
http://maven.apache.org/surefire/maven-surefire-plugin/examples/system-properties.html
fonte
Uma alternativa específica do eclipse limitada ao parâmetro java.library.path JVM permite defini-lo para uma pasta de origem específica, em vez de para todo o jdk, conforme proposto em outra resposta:
Para aqueles interessados em detalhes sobre por que a tag maven argline deve ser preferida a systemProperties, veja, por exemplo:
Pegue arquivos JNI nativos no teste Maven (lwjgl)
fonte
Se você configurá-lo no código Java, poderá configurá-lo assim
referência:
https://stackoverflow.com/a/60654275/4712855
https://stackoverflow.com/a/10774432/4712855
fonte