2012-02-19 6 views
2

프로젝트에 단위 테스트를 통합하기 위해 프로젝트에 maven 종속성을 추가했습니다. 하지만 콩 생성 오류가 발생했습니다. 여러 가지 방법을 시도하고 봤습니다. 오류와 관련된 기사를 발견했습니다. 그러나 이들은 내 문제에 대해 대답 할 수 없었다.봄의 junit 테스트에서 빈 생성 예외

여기 내 application.xml을 파일

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:tx="http://www.springframework.org/schema/tx" xmlns:p="http://www.springframework.org/schema/p" 
    xmlns:aop="http://www.springframework.org/schema/aop" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
     http://www.springframework.org/schema/context 
     http://www.springframework.org/schema/context/spring-context-3.0.xsd 
     http://www.springframework.org/schema/tx 
     http://www.springframework.org/schema/tx/spring-tx-3.0.xsd 
     http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"> 


    <context:property-placeholder location="classpath*:*.properties" /> 

    <tx:annotation-driven transaction-manager="transactionManager" /> 
<!-- <tx:annotation-driven /> --> 
    <context:annotation-config /> 
    <context:component-scan base-package="taxi.com" /> 
<!-- <aop:aspectj-autoproxy /> --> 
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" 
     p:driverClassName="org.hsqldb.jdbcDriver" p:url="jdbc:hsqldb:mem:test" 
     p:username="sa" p:password="" /> 

    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager" 
     p:entityManagerFactory-ref="entityManagerFactory" p:dataSource-ref="dataSource" /> 

    <bean id="entityManagerFactory" 
     class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" 
     p:dataSource-ref="dataSource" p:jpaVendorAdapter-ref="jpaAdapter"> 
     <property name="persistenceUnitName" value="test"></property> 
     <property name="jpaProperties"> 
      <props> 
       <prop key="hibernate.hbm2ddl.auto">create-drop</prop> 
       <prop key="hibernate.show_sql">true</prop> 
       <prop key="hibernate.format_sql">true</prop> 
       <prop key="hibernate.use_sql_comments">true</prop> 
       <prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate3.SpringSessionContext 
       </prop> 
      </props> 
     </property> 

    </bean> 

    <bean id="jpaAdapter" 
     class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" 
     p:databasePlatform="org.hibernate.dialect.HSQLDialect" p:generateDdl="true" 
     p:showSql="true"> 
    </bean> 

    <bean id="hibernateSessionFactory" factory-bean="entityManagerFactory" 
     factory-method="getSessionFactory" /> 

    <bean id="persistenceAnnotation" 
     class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" /> 
    <bean 
     class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor" /> 

    <bean 
     class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor" /> 
    <bean id="personDao" class="taxi.com.dao.impl.PersonDaoImpl" /> 
    <bean id="personService" class="taxi.com.service.impl.PersonServiceImpl" /> 
</beans> 

여기 내 테스트 클래스입니다. 여기

package taxi.com.service.impl; 

import javax.persistence.EntityManager; 
import javax.persistence.PersistenceContext; 

import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.test.context.ContextConfiguration; 
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 
import org.springframework.transaction.annotation.Transactional; 

import taxi.com.model.Person; 

// 
// IMPORTS 
// NOTE: Import specific classes without using wildcards. 
// 

/** 
* <p> 
* Test classes for the {@link PersonServiceImpl}. 
* </p> 
* 
* @author UdeRox 
* 
* @version $Id$ 
**/ 
@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = { 
    "classpath*:*/applicationContext.xml" 
}) 
public class TestPersonService 
{ 
    @PersistenceContext 
    private EntityManager entityManager; 

    @Autowired 
    private PersonServiceImpl personService; 


    /** 
    * <p> 
    * Test the method in {@link PersonServiceImpl#create(taxi.com.model.Person)}. 
    * </p> 
    */ 
    @Test 
    @Transactional 
    public void createPersonTest() 
    { 
       personService.create(new Person()); 
    } 

    /** 
    * <p> 
    * Getter for personService. 
    * </p> 
    * 
    * @return the personService 
    */ 
    public PersonServiceImpl getPersonService() 
    { 
     return personService; 
    } 

    /** 
    * <p> 
    * Setting value for personService. 
    * </p> 
    * 
    * @param personService the personService to set 
    */ 
    public void setPersonService(PersonServiceImpl personService) 
    { 
     this.personService = personService; 
    } 
} 

미리

내 서비스 클래스

Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.86 sec <<< FAILURE! 
createPersonTest(taxi.com.service.impl.TestPersonService) Time elapsed: 0.5 sec <<< ERROR! 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'taxi.com.service.impl.TestPersonService': Injection of persistence dependencies failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [javax.persistence.EntityManagerFactory] is defined: expected single bean but found 0 
    at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.postProcessPropertyValues(PersistenceAnnotationBeanPostProcessor.java:341) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1074) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireBeanProperties(AbstractAutowireCapableBeanFactory.java:374) 
    at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:110) 
    at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:75) 
    at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:321) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:220) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:301) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:303) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:240) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) 
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) 
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:236) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:180) 
    at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:35) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:115) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:97) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.apache.maven.surefire.booter.ProviderFactory$ClassLoaderProxy.invoke(ProviderFactory.java:103) 
    at $Proxy0.invoke(Unknown Source) 
    at org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:150) 
    at org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcess(SurefireStarter.java:91) 
    at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:69) 
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [javax.persistence.EntityManagerFactory] is defined: expected single bean but found 0 
    at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.findDefaultEntityManagerFactory(PersistenceAnnotationBeanPostProcessor.java:536) 
    at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.findEntityManagerFactory(PersistenceAnnotationBeanPostProcessor.java:495) 
    at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor$PersistenceElement.resolveEntityManager(PersistenceAnnotationBeanPostProcessor.java:656) 
    at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor$PersistenceElement.getResourceToInject(PersistenceAnnotationBeanPostProcessor.java:629) 
    at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:147) 
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:84) 
    at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.postProcessPropertyValues(PersistenceAnnotationBeanPostProcessor.java:338) 
    ... 32 more 

내가 실수 여기에서 어디 사람이 말해 줄 수, 나는 그것을 찾을 수 없습니다, Thankxx

package taxi.com.service.impl; 

import java.util.List; 

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Service; 
import org.springframework.transaction.annotation.Transactional; 

import taxi.com.dao.IPersonDao; 
import taxi.com.dao.impl.PersonDaoImpl; 
import taxi.com.model.Person; 
import taxt.com.service.IPersonService; 

// 
// IMPORTS 
// NOTE: Import specific classes without using wildcards. 
// 

/** 
* <p> 
* Implementation of {@link IPersonService}. 
* 
* @author UdeRox 
* 
* @version $Id$ 
**/ 
@Service("personService") 
@Transactional 
public class PersonServiceImpl implements IPersonService 
{ 

// @Autowired 
    private PersonDaoImpl personDao; 

    /** 
    * {@inheritDoc} 
    * 
    * @see taxt.com.service.IPersonService#create(taxi.com.model.Person) 
    */ 
    @Override 
    public void create(Person person) 
    { 
     personDao.create(person); 
    } 

    /** 
    * {@inheritDoc} 
    * 
    * @see taxt.com.service.IPersonService#update(taxi.com.model.Person) 
    */ 
    @Override 
    public void update(Person person) 
    { 
     personDao.update(person); 
    } 

    /** 
    * {@inheritDoc} 
    * 
    * @see taxt.com.service.IPersonService#findById(java.lang.Long) 
    */ 
    @Override 
    public Person findById(Long id) 
    { 
     return personDao.findById(id); 
    } 

    /** 
    * {@inheritDoc} 
    * 
    * @see taxt.com.service.IPersonService#findAll() 
    */ 
    @Override 
    public List<Person> findAll() 
    { 
     return personDao.findAll(); 
    } 
} 

오류입니다

+0

무엇이 오류입니까? –

+0

오류가 무엇인지 알려주지 않을 때 bean 작성 오류를 수정하는 방법을 우리에게 어떻게 알려주 길 기대하십니까? (최소한, 만들 수없는 bean을 가리 킵니다.) – AHungerArtist

+0

미안 해요 여기에 포함하는 것을 잊었습니다. 이제는 내 게시물을 편집했습니다. 감사합니다. – 123Ex

답변

0

내 생각에는 구문 문제라고 생각합니다.

@ContextConfiguration(locations = { "classpath*:*/applicationContext.xml") 

대신

@ContextConfiguration(locations = { "classpath:applicationContext.xml") 

보십시오.

+0

회신을 위해 thnx를 바꾼 경우 오류 검사 : createPersonTest (taxi.com.service.impl.TestPersonService) : ApplicationContext를로드하지 못했습니다. – 123Ex

+0

다른 스프링 컨텍스트 파일이 있습니까? 게시 된? – Ralph

+0

예, 하나는 테스트 용이고 다른 하나는 애플리케이션 용이지만 DB 구성 (테스트 DB는 메모리에서 실행 됨)을 제외하고 모두 동일한 구성을 포함합니다. – 123Ex

관련 문제