Frage

Was ist die beste Methode, um mit der Frühling zu testen? Ich gehe davon aus, dass die Kombination testng & jmockit mit Frühling 3 nicht schlecht ist. Das mache ich gerade, aber wenn ich den Kurs abgibt, die Tools für mein frisches Frühlingsprojekt auszuwählen, sagen Sie es mir bitte sofort. :-)

Wie auch immer, ich habe eine Entität erstellt, die ich testen möchte, aber ich bin mir nicht sicher, wie ich die Testng aus dem Frühlingskontext ausführen soll. Ich habe eine einfache Testklasse erstellt

package com.mydomain.data.entities.test;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.testng.AbstractTestNGSpringContextTests;
import org.testng.Assert;
import org.testng.annotations.*;

@ContextConfiguration(locations={"classpath:applicationContext.xml"}) 
public class SimpleTest extends AbstractTestNGSpringContextTests {

    @Autowired
    private ApplicationContext applicationContext;

    @BeforeClass
    protected void setUp() throws Exception {
        Assert.assertNotNull(applicationContext);
    }

    @Test
    public void testNothing() {

    }

}

Mit ApplicationContext.xml importieren Sie Beans zum Einrichten der Modell- und Geschäftsschicht. Zunächst einmal möchte ich, dass es die ApplicationContext.xml von Project/Webroot/Web-Inf verwendet, während die Quelle für diesen Test in Projekt/SRC/Com/Mydomain/Daten/Entitäten/Tests lebt, aber ich glaube das, das glaube ich /ApplicationContext.xml würde mir Projekte/SRC geben, wie ClassPath: Ist das richtig?

Nachdem ich nun die Modell- und Geschäftsebenen verwende, die meine Webanwendung verwenden würde, sollte ich erwarten, dass es sich ähnlich verhalten wird. Wenn ich jedoch den Test auf den Test starte, hat es SAIS: Klasse org.hiNNate.cfg.uthedmappings hat die Schnittstelle org.hiNNate.cfg.Mappings als Superklasse:

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in URL [file:/Users/niklas/Documents/Eclipse/Project/WebRoot/WEB-INF/Project-Model.xml]: Invocation of init method failed; nested exception is java.lang.IncompatibleClassChangeError: class org.hibernate.cfg.ExtendedMappings has interface org.hibernate.cfg.Mappings as super class
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1393)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:511)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:449)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:289)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:286)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:192)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:352)
    at org.springframework.beans.factory.BeanFactoryUtils.beansOfTypeIncludingAncestors(BeanFactoryUtils.java:266)
    at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.detectPersistenceExceptionTranslators(PersistenceExceptionTranslationInterceptor.java:121)
    at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.<init>(PersistenceExceptionTranslationInterceptor.java:77)
    at org.springframework.dao.annotation.PersistenceExceptionTranslationAdvisor.<init>(PersistenceExceptionTranslationAdvisor.java:70)
    at org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor.setBeanFactory(PersistenceExceptionTranslationPostProcessor.java:99)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeAwareMethods(AbstractAutowireCapableBeanFactory.java:1414)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1381)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:511)
    ... 38 more
Caused by: java.lang.IncompatibleClassChangeError: class org.hibernate.cfg.ExtendedMappings has interface org.hibernate.cfg.Mappings as super class
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:700)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
    at java.net.URLClassLoader.access$000(URLClassLoader.java:56)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:319)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:330)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:254)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:399)
    at org.hibernate.cfg.AnnotationConfiguration.createExtendedMappings(AnnotationConfiguration.java:187)
    at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:277)
    at org.hibernate.cfg.Configuration.buildMappings(Configuration.java:1162)
    at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:667)
    at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:211)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1452)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1390)
    ... 53 more

Was ist das und warum bekomme ich das? Irgendwelche Hinweise?

Meine SessionFactory sieht so aus

  <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="annotatedClasses">
      <list>
       <!-- Entity classes from package com.mydomain.data.entities -->
      </list>
    </property>
    <property name="hibernateProperties">
      <props>
        <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
        <prop key="hibernate.show_sql">false</prop>
      </props>
    </property>
  </bean>
War es hilfreich?

Lösung

Jetzt scheint das Problem nicht mit einer der Frühlings- oder Testtests zusammenhängen. Der Schlüsselteil ist:

 java.lang.IncompatibleClassChangeError: class org.hibernate.cfg.ExtendedMappings has interface org.hibernate.cfg.Mappings as super class

Bist du sicher, dass dein Klassenpfad in Ordnung ist? Dh Sie haben eine kompatible Version von Hibernate -Modulen und keine Wiederholungen dort?

Was ist, wenn Sie einen einfachen Testng -Test erstellen, der Folgendes ausführt:

Class.forName("org.hibernate.cfg.ExtendedMappings");

?

Andere Tipps

Ihr Test CKASS muss sich verlängern AbstractTestNGSpringContextTests. Oder wenn Ihr Code testet, dass die Datenbank eine andere nützliche Klasse erhält, um sie zu verlängern, ist AbstractTransactionAltestngspringContextTests.

Wenden Sie sich an das Kapitel über TestNG in der Frühjahrsdokumentation:

Für mich wurde dieses Problem verursacht, weil ich andere Hibernate -Versionen hatte, nicht wegen eines Dritten, einschließlich dieser. Ein Sweep Ihres Projekts/Ihre POMs, um sicherzustellen, dass Sie YouSerlf nur eine Hibernate -Version verwenden, lohnt sich.

Vielleicht möchten Sie Hibernate-Annotations-3.5.0-beta-1 versuchen, wie dies mit Hibernate-Core-3.5.0-beta-1 ausgerichtet ist.

Manchmal bekomme ich immer noch den java.lang.incompatibllecLasschangeError, da ich versuche, Hibernate -Suche zu verwenden, die die "alten" Anmerkungen verwendet.

Ich bin mir auch nicht sicher, ob Sie JBoss ausführen. Wenn Sie jedoch sind, erhalten Sie diesen Fehler mit Core 3.5.0.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top