سؤال

ما هي أفضل طريقة ممارسة للقيام باختبار الوحدة مع الربيع؟ أفترض أن مجموعة Testng & JMockit مع الربيع 3 ليست سيئة، لذلك هذا ما أفعله الآن، ولكن إذا كنت خارج الدورة اختيار الأدوات لمشروع الربيع الطازج، فالرجاء أن تخبرني على الفور. :-)

على أي حال، قمت بإنشاء كيان أريد اختباره، لكنني لست متأكدا من كيفية تشغيل Testng من سياق الربيع. لقد قمت بإنشاء فئة اختبار بسيطة

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() {

    }

}

مع ApplicationContext.xml استيراد الفول لإعداد الطراز وطبقة العمل. أولا، وأعجب بالإيقاف كل شيء، أود استخدام ApplicationContext.xml من المشروع / Webroot / Web-INF، في حين أن مصدر هذا الاختبار يعيش في المشروع / SRC / COM / MyDomain / البيانات / الكيانات / الاختبار، لكنني أعتقد ذلك من شأنه أن يعطيني / pplicationcontext.xml مشاريع / SRC، نفس classpath: هل هذا صحيح؟

علاوة على ذلك، الآن بعد أن أستخدم الطراز وطبقات العمل التي يستخدمها تطبيق الويب الخاص بي، يجب أن أتوقع أن تتصرف بالمثل. ولكن، عندما يطلق اختبار TESTNG على الاختبار، فإنه SAIS: Class Org.habernate.cfg.extendedmAppings لديه واجهة Org.hibernate.cfg.mappings كطبقة فائقة:

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

ما هذا ولماذا أحصل على هذا؟ أي أدلة؟

رحيمي تبدو وكأنها

  <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>
هل كانت مفيدة؟

المحلول

الآن لا يبدو أن المشكلة مرتبطة بأي من الربيع أو Testng. الجزء الرئيسي هو:

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

هل أنت متأكد من أن classpath الخاص بك على ما يرام؟ أي سيكون لديك نسخة متوافقة من وحدات السبات وليس هناك تكرار هناك؟

ماذا لو قمت بإنشاء اختبار اختبار بسيط يقوم بما يلي:

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

?

نصائح أخرى

يحتاج اختبار CKASS الخاص بك إلى تمديد الإيضاحات. وبعد أو إذا كان التعليمات الكود الخاص بك هو اختبار قاعدة البيانات يؤكد فئة مفيدة أخرى لتمديد absracttransactionaltestngspringconttestts..

استشر الفصل على Testng في وثائق الربيع:

بالنسبة لي سبب هذه المشكلة لأنني أدرجت إصدارات السبات المختلفة نفسي، وليس بسبب طرف ثالث بما في ذلكها. اكتساح لمشروعك / POMS للتأكد من أنك تستخدم لك فقط إصدار سبات واحد مفيد.

قد ترغب في تجربة السبات - التعليقات التوضيحية - 3.5.0-Beta-1 مثل هذه المحاذاة مع Hibernate-Core-3.5.0-Beta-1.

ما زلت أحصل على java.lang.incompatileclasschangeError في بعض الأحيان، لأنني أحاول استخدام البحث السبات الذي يستخدم التعليقات التوضيحية "القديمة".

أيضا، لست متأكدا مما إذا كنت تقوم بتشغيل JBoss، ولكن إذا كنت ستحصل على هذا الخطأ باستخدام Core 3.5.0.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top