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?
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.
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 {}
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>
Il ne fonctionne toujours pas pour moi dans IntelliJ. Je suis capable de l'exécuter en ligne de commande cependant.
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
J'ai simplement ajouté:
@RunWith (JMockit.class)
Ce qui a résolu le problème, selon la documentation de la réponse acceptée.