web-dev-qa-db-fra.com

JMockit - problème d'initialisation

Lorsque j'utilise le test suivant, un avertissement s'affiche:

AVERTISSEMENT: JMockit a été initialisé à la demande, ce qui peut entraîner l'échec de certains tests. veuillez consulter la documentation pour de meilleurs moyens de l’initialiser.

Ceci est mon implémentation de test:

package test;

import static mockit.Mockit.*;
import junit.framework.TestCase;
import mockit.*;
import mockit.integration.junit4.*;


import org.junit.*;
import org.junit.runner.*;

import filip.ClassUnderTest;
import filip.LowerClass;

@RunWith(JMockit.class)
public class MockTest extends TestCase {

    @MockClass(realClass = LowerClass.class)
    public static class LowerClassMock {
        @Mock(invocations = 1)
        public String doWork() {
            return "Mockowanie dziala :D";
        }
    }

    @Before
    public void setUp() { setUpMocks(LowerClassMock.class); }

    @After
    public void tearDown() { tearDownMocks(); }

    @Test
    public void testJMockit() {
        ClassUnderTest classUnderTest = new ClassUnderTest();

        classUnderTest.print();
    }

}

Des idées?

29
Filip

Si je comprends bien, cette exception est levée lorsque l’on essaie d’appeler une méthode JMockit, alors que JMockit n’a pas été correctement initialisé.

Assurez-vous de suivre les instructions d'installation de JMockit , en particulier les points 3 et 4. Si le fichier jar JMockit est livré après le fichier jar JUnit dans le chemin de classe, des problèmes peuvent se produire.

17
Etienne Neveu

La réponse acceptée est un peu dépassée en ce qui concerne les liens, il est donc utile de mentionner directement les différentes solutions.

Pour résoudre ce problème, effectuez l’une des opérations suivantes:

1 - Spécifiez un javaagent

Ajoutez ceci à votre environnement d'exécution JUnit (pour votre version):

 -javaagent:path/to/your/jmockit/jmockit-0.998.jar 

2 - configurez le plugin Surefire dans Maven pour l'éviter

Ajoutez les éléments suivants à votre configuration Maven (choisissez vos propres versions)

<!-- JMockit must be before JUnit in the classpath -->
<dependency>
  <groupId>mockit</groupId>
  <artifactId>jmockit</artifactId>
</dependency>
<!-- Standard unit testing -->
<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
</dependency>

Assurez-vous que votre plug-in Surefire est configuré comme suit (pour vos versions particulières):

<plugin>
   <groupId>org.Apache.maven.plugins</groupId>
   <artifactId>maven-surefire-plugin</artifactId>
   <version>2.4.3</version>
   <configuration>
      <argLine>-javaagent:${settings.localRepository}/mockit/jmockit/0.998/jmockit-0.998.jar</argLine>
      <useSystemClassLoader>true</useSystemClassLoader>
    </configuration>
 </plugin>

3 - Utilisez l'annotation JUnit @RunWith

Ajouter cette annotation de coureur JUnit à chaque classe de test

@RunWith(JMockit.class)
public class ExampleTest {}
36
Gary Rowe

En plus de la solution de Gary Rowe :

Une intégration plus robuste (c'est-à-dire agnostique de la version et du chemin du référentiel) de JMockit dans Surefire serait

<argLine>-javaagent:${org.jmockit:jmockit:jar}

Pour que cette résolution fonctionne, le plugin maven-dependency (version> = 2.5.1!) Doit être configuré comme suit:

<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.5.1</version>
<executions>
    <execution>
        <id>getClasspathFilenames</id>
        <goals>
            <goal>properties</goal>
        </goals>
    </execution>
</executions>

3
Peter Wippermann

Il ne fonctionne toujours pas pour moi dans IntelliJ. Je suis capable de l'exécuter en ligne de commande cependant.

0
Ronn Macc

J'ai configuré un fichier de propriétés dans le classpath pour faciliter la configuration de Junit 5:

Il DOIT être nommé junit-platform.properties

junit.jupiter.extensions.autodetection.enabled = true
junit.jupiter.testinstance.lifecycle.default = per_class

Assurez-vous que vous utilisez une version plus récente de Jmockit comportant la classe JmockitExtension. NOTE: Jmockit version 1.8 IS N'EST PAS plus récent que la version 1.41. La version 1.8 aurait dû être 1.08.

Référence Maven Central: https://mvnrepository.com/artifact/org.jmockit/jmockit

0
TheJeff

J'ai simplement ajouté:

@RunWith (JMockit.class)

Ce qui a résolu le problème, selon la documentation de la réponse acceptée.

0