Le temps de démarrage de JUnit est lent

Je travaille sur un projet relativement petit (en termes de dépendances), et chaque fois que j’exécute un test unitaire, le chargement de la machine virtuelle Java prend 8 secondes, avant que le test réel ne soit exécuté en 0,2 secondes.

Mon environnement:

  • Java 8
  • Spring Tool Suite 3.8.1.RELEASE
  • JUnit 4
  • Windows 8

Je crains qu’il y ait quelque chose dans mon environnement qui fait que cela prenne si longtemps, et j’espère que quelqu’un a déjà vu cela auparavant et a trouvé la source du problème et peut-être une solution? Par exemple, si ma variable d’environnement PATH est vraiment longue, est-ce que cela importera du tout? Que se passe-t-il exactement lorsque je lance un test JUnit ?

Le test que j’essaie de faire est le suivant:

 public class TemplateLocationCalculatorTest { private TemplateLocationCalculator target = new TemplateLocationCalculator(); @Test public void whenGivenRootReturnIndex(){ Assert.assertEquals("index", target.calculate("/")); } } 

et la classe cible est:

 public class TemplateLocationCalculator { public Ssortingng calculate(Ssortingng ssortingng) { return "index"; } } 

J’espère que vous serez d’accord avec moi quand je dis que cela ne devrait pas tarder à se charger.

OP ici.

Suite à une suggestion donnée dans le chat, j’ai utilisé Microsoft Process Monitor et après beaucoup de filtrage, j’ai découvert que le logiciel AV Avecto DefendPoint était en cours d’exécution sur ma machine et que cela semblait être le goulot d’étranglement. Chaque fois que je commence un test, il tourne à environ 25%, ce qui me semble indiquer qu’il tourne à pleine vitesse sur un seul thread sur l’un de mes quatre cœurs. Je ne suis pas l’administrateur sur cette machine, je ne pouvais donc pas la désactiver pour vérifier cette hypothèse, mais en général, si d’autres personnes devraient consulter ce problème, vérifiez s’il peut s’agir de votre logiciel anti-virus.

Une raison potentielle pourrait être la numérisation et le câblage automatique des composants au démarrage. Vous pouvez limiter cela en créant un fichier de config séparé pour les tests, qui limite l’espace de recherche des composants, comme expliqué ici .

Dans la configuration, vous pouvez soit charger des beans paresseux ou les connecter explicitement (voir plus de détails ici )

      

Ensuite, dans la classe tests, nous spécifions le nouveau fichier de configuration:

 @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:/path/to/test-config.xml" }) public class TemplateLocationCalculatorTest { @Autowired private TemplateLocationCalculator target; @Test public void whenGivenRootReturnIndex(){ Assert.assertEquals("index", target.calculate("/")); } } @Bean public class TemplateLocationCalculator { public Ssortingng calculate(Ssortingng ssortingng) { return "index"; } }