Нет такой ошибки метода при создании теста JUnit

Я пытался выяснить эту проблему в течение последних 2 дней без везения. Я просто пытаюсь создать тест JUnit на основе аннотаций, используя структуру Spring вместе с спящим режимом.

Моя IDE — это netbeans 6.5, и я использую hibernate 3, spring 2.5.5 и JUnit 4.4.

Вот ошибка, которую я получаю:

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)

person IaCoder    schedule 08.01.2009    source источник
comment
Похоже, это проблема конфигурации (путь к классу) с netbeans 6.5. Я скопировал проект в eclipse, и он отлично работает.   -  person IaCoder    schedule 09.01.2009
comment
Я получаю эту ОШИБКУ, даже если в Eclipse я пробовал с 1.5/3.1/4.0.   -  person Ravi Parekh    schedule 07.02.2012


Ответы (5)


java.lang.NoSuchMethodError всегда указывает, что версия класса, которая была в пути к классам вашего компилятора, отличается от версии класса, который находится в вашем пути к классам во время выполнения (если бы метод отсутствовал во время компиляции, компиляция завершилась бы неудачей).

В этом случае у вас была другая версия org.objectweb.asm.ClassWriter в вашем пути к классам во время компиляции, чем в вашем пути к классам во время выполнения.

person Jared    schedule 08.01.2009
comment
что вы подразумеваете под версией отличается? это отсутствующий метод в классе времени выполнения или какое-либо изменение в классе времени выполнения? Я полагаю, что компиляция чего-то с классом, который затем получает новое статическое поле (нерелевантная вещь) и используется во время выполнения, не выдает эту ошибку, верно? - person lisak; 15.07.2011
comment
просто сказать, что это не «всегда» означает, что это другая версия, но может быть и так, что одна и та же версия загружается дважды. У меня была эта проблема на днях. Чтобы еще больше сузить источник проблемы, запустите виртуальную машину с -class:verbose, которая отображает все загруженные классы и откуда - person Christian F; 16.07.2014
comment
java.lang.NoSuchMethodError: org/apache/commons/fileupload/servlet/ServletFileUpload.parseRequest получаю эту ошибку. Я использую банку commons.fileupload1.2.1.jar. Это та версия, которую вы упомянули? - person Freakyuser; 25.10.2014

Определенно у вас разные версии вашего класса ClassWriter во время выполнения, чем во время компиляции.

person Xian    schedule 08.01.2009

Я думаю, что вы подбираете неправильную версию asm.jar где-то в пути к классам, который вы используете для своих тестов.

person krosenvold    schedule 08.01.2009

У меня была аналогичная ошибка при использовании Spring 2.5 с Hibernate в NetBeans 6.5. Одним из способов решения проблемы была загрузка Spring 3.0 M2 и создание библиотеки NetBeans, которую я назвал Spring_3, используя файлы jar из дистрибутива. Эта библиотека также должна была включать файл antlr-runtime-3.0.jar.

См.: http://forum.springsource.org/showthread.php?t=65324< /а>

-Лео

person Community    schedule 28.02.2009

Я хотел бы поделиться своим предложением со всеми, кто сталкивается с этим тестом JUnit для Android; ничего из вышеперечисленного не сработало для меня, и это было простое решение:

В Eclipse>>project properties>>Android>> убедитесь, что проект, который вы тестируете, указан в библиотеке. «является библиотекой» может оставаться неотмеченным

person tricknology    schedule 13.09.2014