2009-01-08 14 views
10

Ho provato a risolvere questo problema negli ultimi 2 giorni senza fortuna. Sto semplicemente provando a creare un test JUnit basato sull'annotazione utilizzando il framework di primavera e l'ibernazione.Errore No Metodo durante la creazione del test JUnit

Il mio IDE è netbeans 6.5 e sto usando hibernate 3, spring 2.5.5 e JUnit 4.4.

Ecco l'errore che sto ricevendo:

Testcase: testFindContacts(com.mycontacts.data.dao.MyContactHibernateDaoTransactionTest):  Caused an ERROR 
Failed to load ApplicationContext 
java.lang.IllegalStateException: Failed to load ApplicationContext 
     at org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:203) 
     at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:109) 
     at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:75) 
     at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:255) 
     at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:93) 
     at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.invokeTestMethod(SpringJUnit4ClassRunner.java:130) 
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [shared-context.xml]: Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.<init>(I)V 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1337) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:473) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380) 
     at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264) 
     at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:221) 
     at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261) 
     at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185) 
     at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164) 
     at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:423) 
     at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:729) 
     at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:381) 
     at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:84) 
     at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:42) 
     at org.springframework.test.context.TestContext.loadApplicationContext(TestContext.java:173) 
     at org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:199) 
Caused by: java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.<init>(I)V 
     at net.sf.cglib.core.DebuggingClassWriter.<init>(DebuggingClassWriter.java:47) 
     at net.sf.cglib.core.DefaultGeneratorStrategy.getClassWriter(DefaultGeneratorStrategy.java:30) 
     at net.sf.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:24) 
     at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:216) 
     at net.sf.cglib.core.KeyFactory$Generator.create(KeyFactory.java:144) 
     at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:116) 
     at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:108) 
     at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:104) 
     at net.sf.cglib.proxy.Enhancer.<clinit>(Enhancer.java:69) 
     at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.getProxyFactory(CGLIBLazyInitializer.java:117) 
     at org.hibernate.proxy.pojo.cglib.CGLIBProxyFactory.postInstantiate(CGLIBProxyFactory.java:43) 
     at org.hibernate.tuple.entity.PojoEntityTuplizer.buildProxyFactory(PojoEntityTuplizer.java:162) 
     at org.hibernate.tuple.entity.AbstractEntityTuplizer.<init>(AbstractEntityTuplizer.java:135) 
     at org.hibernate.tuple.entity.PojoEntityTuplizer.<init>(PojoEntityTuplizer.java:55) 
     at org.hibernate.tuple.entity.EntityEntityModeToTuplizerMapping.<init>(EntityEntityModeToTuplizerMapping.java:56) 
     at org.hibernate.tuple.entity.EntityMetamodel.<init>(EntityMetamodel.java:295) 
     at org.hibernate.persister.entity.AbstractEntityPersister.<init>(AbstractEntityPersister.java:434) 
     at org.hibernate.persister.entity.SingleTableEntityPersister.<init>(SingleTableEntityPersister.java:109) 
     at org.hibernate.persister.PersisterFactory.createClassPersister(PersisterFactory.java:55) 
     at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:226) 
     at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1294) 
     at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:859) 
     at org.springframework.orm.hibernate3.LocalSessionFactoryBean.newSessionFactory(LocalSessionFactoryBean.java:814) 
     at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:732) 
     at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:211) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1368) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1334) 
+0

Sembra essere un problema di configurazione (percorso di classe) con netbeans 6.5. Ho copiato il progetto in eclissi e funziona perfettamente. – IaCoder

+0

Ricevo questo ERRORE anche se in Eclipse ho provato con 1.5/3.1/4.0. –

risposta

19

java.lang.NoSuchMethodError indica sempre che la versione di una classe presente nel classpath del compilatore è diversa dalla versione della classe presente nel percorso di classe di runtime (se il metodo era mancante in fase di compilazione, la compilazione avrebbe avuto esito negativo .)

In questo caso, al momento della compilazione si disponeva di una versione diversa di org.objectweb.asm.ClassWriter sul percorso di classe rispetto al percorso di classe di runtime.

+0

cosa intendi per "versione è diversa"? manca il metodo nella classe runtime, o qualunque cambiamento nella classe runtime? Suppongo che compilare qualcosa con una classe, che poi ottiene un nuovo campo statico (cosa irrilevante) e venga usato in runtime, non getti questo errore giusto? – lisak

+1

solo per dire che "non sempre" indica che si tratta di una versione diversa ma potrebbe anche essere che la stessa versione sia caricata due volte. Ho avuto questo problema l'altro giorno. Per restringere ulteriormente il punto in cui inizia il problema vm con '-class: verbose' che visualizza tutte le classi caricate e da dove –

+1

È' -verbose: class' – T3rm1

1

Penso che si sta raccogliendo una versione non corretta di asm.jar da qualche parte nel percorso di classe si sta utilizzando per i test.

2

Sicuramente si hanno diverse versioni della classe ClassWriter in fase di esecuzione rispetto al tempo di compilazione.

1

Ho avuto un errore simile utilizzando Spring 2.5 con Hibernate su NetBeans 6.5. Un modo in cui ho risolto il problema è stato il download di Spring 3.0 M2 e la creazione di una libreria NetBeans che ho chiamato Spring_3 utilizzando i jar della distro. Questa libreria doveva anche includere l'antlr-runtime-3.0.jar.

See: http://forum.springsource.org/showthread.php?t=65324

-Leo

0

Vorrei condividere il mio suggerimento per chi si imbatte in questo test JUnit per Android; nessuno dei precedenti ha funzionato per me e questa era una semplice soluzione:

In Eclipse>>project properties>>Android>> assicurarsi che il progetto che si sta testando sia indicato sotto Libreria. 'è una libreria' può rimanere deselezionato

Problemi correlati