java.lang.NoClassDefFoundError: org/objenesis/ObjenesisStd avec Mockito
Je ne sais pas pourquoi j'ai cette erreur avec mockito
java.lang.NoClassDefFoundError: org/objenesis/ObjenesisStd
at org.mockito.internal.creation.jmock.ClassImposterizer.<init>(ClassImposterizer.java:36)
at org.mockito.internal.creation.jmock.ClassImposterizer.<clinit>(ClassImposterizer.java:29)
at org.mockito.internal.util.MockCreationValidator.isTypeMockable(MockCreationValidator.java:17)
at org.mockito.internal.util.MockCreationValidator.validateType(MockCreationValidator.java:21)
at org.mockito.internal.creation.MockSettingsImpl.validatedSettings(MockSettingsImpl.java:133)
at org.mockito.internal.creation.MockSettingsImpl.confirm(MockSettingsImpl.java:127)
at org.mockito.internal.MockitoCore.mock(MockitoCore.java:50)
at org.mockito.Mockito.mock(Mockito.java:1243)
at org.mockito.Mockito.mock(Mockito.java:1120)
at fr.oap.SubscriptionTest.testGetSubscriptionById(SubscriptionFactoryTest.java:24)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at junit.framework.TestCase.runTest(TestCase.java:176)
at junit.framework.TestCase.runBare(TestCase.java:141)
at junit.framework.TestResult$1.protect(TestResult.java:122)
at junit.framework.TestResult.runProtected(TestResult.java:142)
at junit.framework.TestResult.run(TestResult.java:125)
at junit.framework.TestCase.run(TestCase.java:129)
at junit.framework.TestSuite.runTest(TestSuite.java:255)
at junit.framework.TestSuite.run(TestSuite.java:250)
at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:84)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: java.lang.ClassNotFoundException: org.objenesis.ObjenesisStd
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
... 29 more
Sur ma classe de Test est comme ceci :
import junit.framework.TestCase;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
import org.mockito.Mockito;
import fr.aop.subscription.AbstractSubscription;
public class SubscriptionTest extends TestCase {
@Test
public void testGetSubscriptionById() {
ArgumentCaptor<AbstractSubscription>
arg=ArgumentCaptor.forClass(AbstractSubscription.class);
Subscription objMock=Mockito.mock(Subscription.class);
Mockito.when(objMock.getSubscribById(1)).thenReturn(arg.getValue());
}
}
Et sur la méthode getSubscribById qui est dans la classe de l'Abonnement:
@Override
public AbstractSubscription getSubscriptionById(final Integer id) {
this.log.debug("BEGIN: getSubscriptionById id = " + id);
AbstractSubscription obj = null;
if (id != null) {
final StringBuilder queryString = new StringBuilder("select c from AbstractSubscription c ");
try {
queryString.append("where c.id = :id");
Query query = this.getEntityManager().createQuery(queryString.toString());
query = query.setParameter("id", id);
obj = (AbstractSubscription) query.getSingleResult();
} catch (final Exception exc) {
}
}
return obj;
}
quand je instancier la Cotisation de la classe, il me demande la connexion à la base de données, c'est pourquoi je veux sortir de ce et à la recherche d'une solution comme mockito
juste ajouter objenesis dans votre classpath
OriginalL'auteur TinyOS | 2015-01-19
Vous devez vous connecter pour publier un commentaire.
ClassNotFoundException
est le résultat d'un chargeur de classe qui n'est pas en mesure de charger une classe particulière.Dans votre cas, Mockito a une dépendance transitive de Objenesis (il doit Objenesis pour corriger le comportement). Vous êtes le plus susceptible d'essayer de l'exécuter vos tests avec Mockito sur test de chemin de classe, mais sans Objenesis.
Vous devez ajouter Objenesis à votre classe de test chemin.
Pour des projets maven, assurez-vous que:
vous avez déclaré Mockito comme test de dépendance
pour exécuter un test en particulier à partir de la ligne de commande exécuter
Comment utilisez-vous vos tests? À l'aide de Maven, Ant, en ligne de commande?
j'ai un projet maven, mais je fais un clic droit sur mon classtest et je choisis exécuter en tant qu'JunitTest
J'ai mis à jour le commentaire. Vous devriez avoir la Mockito test de dépendance dans votre POM et il n'est pas exclu Objenesis. Si cela ne fonctionne pas, c'est probablement une IDE de bug. Il faut toujours travailler à partir de la ligne de commande.
Cool, pouvez-vous marquer la réponse acceptée et fermer cette question?
OriginalL'auteur Crazyjavahacking
Vous pouvez essayer d'ajouter de la mockito-tous artefact au lieu de mockito-core, il fonctionne depuis la version 1.9.5
OriginalL'auteur user917279
J'avais la même erreur:
quand j'ai été l'exécution d'un test dans un nouveau projet qui a été à l'aide de Mockito.
S'avère en plus de l'ajout de la Mockito Dépendances moi aussi j'ai eu le Objenesis de dépendance. Tout ce que je besoin de faire est d'ajouter le dessous de la dépendance à mon pom.xml et tout a fonctionné parfaitement bien.
OriginalL'auteur Popeye
J'ai ce problème avec la version de mockito-core 2.22.0.
Après enquête, il semble que le pot de objenesis a été endommagé dans mon repository maven...
Juste un
rm -rf .m2/repository/org/objenesis
est assezOriginalL'auteur user1853984