J'ai quelques tests unitaires Junit qui nécessitent une grande quantité d'espace de tas pour fonctionner - c'est-à-dire 1G. (Ils testent les fonctionnalités gourmandes en mémoire pour une application de démarrage Web qui ne fonctionnera qu'avec un espace de stockage suffisant et qui sera exécutée en interne sur des machines Win 7 64 bits - la refonte des tests n'est donc pas une suggestion pratique.)
Je développe dans Intellij IDEA, donc je sais que je peux définir les paramètres JVM (par exemple -Xmx1024M) pour la classe de test. Cependant, ce n'est que pour exécuter toute la classe de test - si je veux exécuter un test individuel, je dois recréer les configurations d'exécution pour cette méthode de test.
En outre, ceux-ci sont spécifiques à l'IDE et à la boîte - donc si je change de boîte (je développe sur plusieurs machines) ou si l'un de mes collègues essaie d'exécuter les tests, ces paramètres ne sont pas transférés. (De plus, d'autres IDE comme Eclipse et NetBeans sont utilisés par mes collègues.) FWIW, nous utilisons mercurial pour le contrôle du code source.
Pour le cycle de construction, nous utilisons Maven, donc je sais comment spécifier les paramètres JVM pour cela.
Donc: - Je cherche un moyen de spécifier les paramètres JVM qui s'appliqueront à l'ensemble de la classe de test et aux méthodes de test individuelles; et - j'aimerais partager ces spécifications à travers les IDE sur n'importe quelle machine (après avoir récupéré le code du référentiel).
la source
Réponses:
Dans IntelliJ, vous pouvez spécifier les paramètres par défaut pour chaque configuration d'exécution. Dans la boîte de dialogue de configuration Exécuter / Déboguer (celle que vous utilisez pour configurer le tas par test), cliquez sur Defaults et JUnit . Ces paramètres seront automatiquement appliqués à chaque nouvelle configuration de test JUnit. Je suppose qu'un paramètre similaire existe pour Eclipse.
Cependant, il n'existe pas d'option simple pour transférer ces paramètres (au moins dans IntelliJ) entre les environnements. Vous pouvez valider les fichiers de projet IntelliJ dans votre référentiel: cela peut fonctionner, mais je ne le recommande pas.
Vous savez comment les définir pour
maven-surefire-plugin
. Bien. C'est le moyen le plus portable (voir la réponse de Ptomli pour un exemple).Pour le reste, vous devez vous rappeler que les cas de test JUnit ne sont qu'un ensemble de classes Java, pas un programme autonome. C'est au runner (que ce soit un runner JUnit autonome, votre IDE,
maven-surefire-plugin
pour définir ces options. Cela étant dit, il n'y a pas de moyen "portable" de les définir, de sorte que les paramètres de mémoire soient appliqués quel que soit le runner.Pour vous donner un exemple: vous ne pouvez pas définir de
Xmx
paramètre lors du développement d'un servlet - c'est au conteneur de le définir. Vous ne pouvez pas dire: "ce servlet doit toujours être exécuté avecXmx=1G
.la source
Dans Maven, vous pouvez configurer le plugin surefire
Si vous utilisez Maven pour les builds, cette configuration sera transportée dans l'arborescence des sources et appliquée lorsque les tests sont effectués. Consultez la documentation du plugin Maven Surefire .
la source
-Xmx256M
Les paramètres peuvent également être définis à la volée.
Voir http://www.cowtowncoder.com/blog/archives/2010/04/entry_385.html
la source
Selon cette question d'assistance https://intellij-support.jetbrains.com/hc/en-us/community/posts/206165789-JUnit-default-heap-size-overridden-
l'argument -Xmx pour une exécution de test Junit IntelliJ proviendra du plugin maven-surefire-plugin, s'il est défini.
Cet extrait de code pom.xml
semble passer l'argument -Xmx1024 au test junit, avec IntelliJ 2016.2.4.
la source
Je suis d'accord avec les autres qui disent qu'il n'y a pas de moyen simple de distribuer ces paramètres.
Pour Eclipse: demandez à vos collègues de définir les paramètres suivants:
-Xmx1024m
Après cela, tous les tests seront exécutés avec
-Xmx1024m
mais malheureusement, vous l'avez défini dans chaque installation d'Eclipse. Vous pourriez peut-être créer un package Eclipse personnalisé contenant ce paramètre et le donner à vos collègues.Le processus de travail suivant pourrait également aider: Si l'EDI ne peut pas exécuter un test, le développeur doit vérifier que Maven peut exécuter ce test ou non.
la source
Vous pouvez utiliser systemPropertyVariables (java.protocol.handler.pkgs est le nom de votre argument JVM):
http://maven.apache.org/surefire/maven-surefire-plugin/examples/system-properties.html
la source
Une alternative spécifique à eclipse limitée au paramètre JVM java.library.path permet de le définir pour un dossier source spécifique plutôt que pour l'ensemble du jdk comme proposé dans une autre réponse:
Pour ceux qui s'intéressent aux détails sur les raisons pour lesquelles la balise maven argline devrait être préférée à la balise systemProperties, regardez, par exemple:
Récupérer les fichiers JNI natifs dans le test Maven (lwjgl)
la source
Si vous le définissez dans le code Java, vous pouvez le définir comme ceci
référence:
https://stackoverflow.com/a/60654275/4712855
https://stackoverflow.com/a/10774432/4712855
la source