2015-01-19 7 views
8

nie wiem dlaczego mam tego błędu z Mockitojava.lang.NoClassDefFoundError: org/objenesis/ObjenesisStd z 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 

O mojej klasie test jest tak:

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()); 
} 
} 

io getSubscribById metoda whitch się w klasie Subskrypcja:

@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; 
} 

kiedy instanciate klasę Subcription to d emand me połączenie z bazą danych, dlatego chcę uciec i szukając rozwiązania takiego jak mockito

+0

po prostu dodaj objenesis do swojej ścieżki klasy – Brice

Odpowiedz

13

ClassNotFoundException jest wynikiem programu ładującego klasy, który nie jest w stanie załadować konkretnej klasy.

W twoim przypadku Mockito ma przejściową zależność od Objenesis (do prawidłowego zachowania potrzebuje Objenesis). Najprawdopodobniej próbujesz wykonać test z Mockito na ścieżce klasy testowej, ale bez Objenesis.

Musisz dodać Objenesis do swojej ścieżki testowej.

przypadku projektów Maven mieć pewność, że:

  1. zostały uznane Mockito jako zależność testowym

    <dependency> 
        <groupId>org.mockito</groupId> 
        <artifactId>mockito-core</artifactId> 
        <version>1.10.19</version> 
        <scope>test</scope> 
    </dependency> 
    
  2. uruchomić konkretny test z linii poleceń wykonać

    mvn test -Dtest=fullyQualifedNameToYourTestClass 
    
+0

Jak to zrobić? – TinyOS

+0

W jaki sposób przeprowadzasz testy? Korzystanie z Maven, Ant, z linii poleceń? – Crazyjavahacking

+0

Mam projekt maven ale ja robię prawo clic na moim classtest i wybieram uruchomić jako JunitTest – TinyOS

2

Możesz spróbować dodać mockito - cały artefakt zamiast mockito-core, działa od wersji 1.9.5