java - partitionsloader - JMockit-problema de inicialización
java lang noclassdeffounderror could not initialize class com amazonaws partitions partitionsloader (6)
Además de la solution Gary Rowe:
Una integración más robusta (es decir, de la versión y de la ruta del repositorio independiente) de JMockit en Surefire sería
<argLine>-javaagent:${org.jmockit:jmockit:jar}
Para que esta resolución funcione, el complemento de dependencia de maven (versión> = 2.5.1!) Debe configurarse de esta forma:
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.5.1</version>
<executions>
<execution>
<id>getClasspathFilenames</id>
<goals>
<goal>properties</goal>
</goals>
</execution>
</executions>
Cuando uso la siguiente prueba recibo una ADVERTENCIA:
ADVERTENCIA: JMockit se inicializó a pedido, lo que puede hacer que ciertas pruebas fallen; por favor revise la documentación para ver mejores maneras de inicializarla.
Esta es mi implementación de prueba:
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();
}
}
¿Algunas ideas?
Como lo entiendo, esta excepción se produce cuando uno intenta llamar a un método JMockit, mientras que JMockit no se ha inicializado correctamente.
Asegúrese de seguir las instrucciones de instalación de JMockit , especialmente los puntos 3 y 4. Si el tarro de JMockit aparece después del tarro de JUnit en la ruta de clase, podría causar problemas.
Configuré un archivo de propiedades en el classpath para facilitar la configuración de Junit 5:
DEBE ser nombrado junit-platform.properties
junit.jupiter.extensions.autodetection.enabled = true
junit.jupiter.testinstance.lifecycle.default = per_class
Asegúrese de que está utilizando una versión más reciente de Jmockit que tiene la clase JmockitExtension. NOTA: La versión 1.8 de Jmockit NO ES más nueva que la versión 1.41. La versión 1.8 debería haber sido 1.08.
Referencia de Maven Central: https://mvnrepository.com/artifact/org.jmockit/jmockit
La respuesta aceptada ha quedado un poco desactualizada con respecto a los enlaces, por lo que vale la pena mencionar las distintas soluciones directamente.
Para solucionar este problema, realice una de las siguientes acciones:
1 - Especificar un javaagent
Agregue esto a su entorno de ejecución JUnit (para su versión):
-javaagent:path/to/your/jmockit/jmockit-0.998.jar
2 - configurar el plugin Surefire en Maven para evitarlo
Agregue lo siguiente a su configuración de Maven (elija sus propias versiones)
<!-- 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>
Asegúrese de que su complemento Surefire esté configurado de la siguiente manera (para sus versiones particulares):
<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 - Usar la anotación JUnit @RunWith
Agregue esta anotación de corredor JUnit en cada clase de prueba
@RunWith(JMockit.class)
public class ExampleTest {}
Simplemente agregué:
@RunWith (JMockit.class)
Lo que resolvió el problema, según la documentación en la respuesta aceptada.
Todavía no funciona para mí en IntelliJ. Sin embargo, soy capaz de ejecutarlo.