[SPRING] TestNG 및 Spring 3
SPRINGTestNG 및 Spring 3
Spring을 이용한 단위 테스트를 수행하는 가장 좋은 방법은 무엇입니까? TestNG & jmockit과 Spring 3의 조합은 나쁘지 않습니다. 그래서 지금 당장하고 있습니다. 그렇지만 스프링 프로젝트를위한 도구를 선택하지 않았다면 지금 당장 말해주십시오. :-)
어쨌든 테스트 할 엔티티를 만들었지 만 Spring 컨텍스트에서 실제로 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을 사용하여 모델 및 비즈니스 계층을 설정하기위한 Bean을 가져올 수 있습니다. 먼저이 테스트의 소스는 Project / src / com / mydomain / data / entities / test에 있지만, Project / WebRoot / WEB-INF의 applicationContext.xml을 사용하고 싶습니다. /applicationContext.xml이 나에게 Projects / src를 주겠다. classpath와 동일하다 : 정확합니까?
또한 웹 응용 프로그램에서 사용할 모델과 비즈니스 계층을 사용하고 있으므로 유사하게 동작해야합니다. 하지만 테스트에서 TestNG를 시작하면 다음과 같이됩니다. org.hibernate.cfg.ExtendedMappings 클래스는 인터페이스 org.hibernate.cfg를 가지고 있습니다. 수퍼 클래스로서의 매핑 :
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
이게 뭐야, 왜 내가 이걸 얻는거야? 모든 단서?
내 sessionFactory는 다음과 같습니다.
<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>
해결법
-
==============================
1.이제이 문제는 Spring이나 TestNG와는 관련이없는 것처럼 보입니다. 핵심 부분은 다음과 같습니다.
이제이 문제는 Spring이나 TestNG와는 관련이없는 것처럼 보입니다. 핵심 부분은 다음과 같습니다.
java.lang.IncompatibleClassChangeError: class org.hibernate.cfg.ExtendedMappings has interface org.hibernate.cfg.Mappings as super class
CLASSPATH가 OK입니까? 나. 당신은 Hibernate 모듈의 호환 버전을 가지고 있고 거기에 반복은 없다?
다음을 수행하는 간단한 TestNG 테스트를 작성하면 어떨까요?
Class.forName("org.hibernate.cfg.ExtendedMappings");
?
-
==============================
2.테스트는 AbstractTestNGSpringContextTests를 확장해야합니다. 또는 귀하의 코드가 데이터베이스 접근을 테스트하고 있다면 또 다른 유용한 클래스는 AbstractTransactionalTestNGSpringContextTests입니다.
테스트는 AbstractTestNGSpringContextTests를 확장해야합니다. 또는 귀하의 코드가 데이터베이스 접근을 테스트하고 있다면 또 다른 유용한 클래스는 AbstractTransactionalTestNGSpringContextTests입니다.
-
==============================
3.Spring 문서의 TestNG에 대한 장을 참조하십시오.
Spring 문서의 TestNG에 대한 장을 참조하십시오.
-
==============================
4.나에게는 다른 절전 모드 버전이 포함되어 있기 때문에이 문제가 발생했다. youserlf가 단지 하나의 최대 절전 모드를 사용하고 있는지 확인하기위한 프로젝트 / 폼의 청소는 가치가 있습니다.
나에게는 다른 절전 모드 버전이 포함되어 있기 때문에이 문제가 발생했다. youserlf가 단지 하나의 최대 절전 모드를 사용하고 있는지 확인하기위한 프로젝트 / 폼의 청소는 가치가 있습니다.
-
==============================
5.hibernate-annotation-3.5.0-Beta-1이 hibernate-core-3.5.0-Beta-1과 일치하도록 시도 할 수있다.
hibernate-annotation-3.5.0-Beta-1이 hibernate-core-3.5.0-Beta-1과 일치하도록 시도 할 수있다.
나는 "java.lang.IncompatibleClassChangeError"를 때때로 얻는다. "이전"주석을 사용하는 최대 절전 모드 검색을 사용하려고한다.
또한 JBoss를 실행하고 있는지 확신 할 수 없지만 코어 3.5.0에서이 오류가 발생할 수 있습니다.
from https://stackoverflow.com/questions/1497619/testng-and-spring-3 by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring : @Value 주석을 사용하여 인라인 문자열 목록을 삽입하는 방법 [duplicate] (0) | 2019.04.08 |
---|---|
[SPRING] 다중 파일 파일 최대 크기 예외 - 스프링 부트 내장 된 바람둥이 (0) | 2019.04.08 |
[SPRING] Repository에 대한 특정 DataSource를 설정하는 방법? (0) | 2019.04.08 |
[SPRING] CrudRepository findOne ()과 JpaRepository getOne ()의 차이점 (0) | 2019.04.08 |
[SPRING] RestEasy에 Spring beans 삽입하기 (0) | 2019.04.08 |