2014-03-13 2 views
0

봄, 최대 절전 모드 환경 인 JUnit에 대한 간단한 테스트 환경을 설정하려고합니다. 나는 또한 자바로 모든 것을 설정하려고하고 있으며 지금 XML 파일을 사용하지 않는다.Spring, Hibernate, JUnit Annotated Entity

지금까지 @Autowire@Beans에 접근했지만 @Entity을 사용할 수 없었습니다. 내 엔티티가 등록되지 않았다는 예외가 계속 발생합니다.

JpaTestConfig.java

package com.springtest.test.configuration; 

import java.util.Properties; 
import javax.sql.DataSource; 
import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor; 
import org.springframework.jdbc.datasource.DriverManagerDataSource; 
import org.springframework.orm.jpa.JpaTransactionManager; 
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; 
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter; 
import org.springframework.transaction.PlatformTransactionManager; 
import org.springframework.transaction.annotation.EnableTransactionManagement; 

@Configuration 
@EnableTransactionManagement 
public class JpaTestConfig { 


    @Bean 
    public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean(){ 

     LocalContainerEntityManagerFactoryBean lcemfb 
      = new LocalContainerEntityManagerFactoryBean(); 

     lcemfb.setDataSource(this.dataSource()); 
     lcemfb.setPackagesToScan(new String[] {"com.jverstry"}); 
    lcemfb.setPersistenceUnitName("MyTestPU"); 

     HibernateJpaVendorAdapter va = new HibernateJpaVendorAdapter(); 
    lcemfb.setJpaVendorAdapter(va); 

    Properties ps = new Properties(); 
    ps.put("hibernate.dialect", "org.hibernate.dialect.HSQLDialect"); 
    ps.put("hibernate.hbm2ddl.auto", "create"); 
    lcemfb.setJpaProperties(ps); 

    lcemfb.afterPropertiesSet(); 


     return lcemfb; 

    } 

    @Bean 
    public DataSource dataSource(){ 

     DriverManagerDataSource ds = new DriverManagerDataSource(); 

     ds.setDriverClassName("org.hsqldb.jdbcDriver"); 
     ds.setUrl("jdbc:hsqldb:mem:testdb"); 
     ds.setUsername("sa"); 
     ds.setPassword(""); 

     return ds; 

    } 

    @Bean 
    public PlatformTransactionManager transactionManager(){ 

     JpaTransactionManager tm = new JpaTransactionManager(); 
     tm.setEntityManagerFactory(this.entityManagerFactoryBean().getObject()); 

     return tm; 

    } 

    @Bean 
    public PersistenceExceptionTranslationPostProcessor exceptionTranslation(){ 
     return new PersistenceExceptionTranslationPostProcessor(); 
    } 

} 

ServiceConfig.java

package com.springtest.test.configuration; 

import com.springtest.services.UserService; 
import com.springtest.services.UserServiceImpl; 
import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.ComponentScan; 
import org.springframework.context.annotation.Configuration; 

@Configuration 
@ComponentScan(basePackages = { 
    "com.springtest.service" 
}) 
public class ServiceConfig { 

    @Bean 
    public UserService getuserService() { 
     return new UserServiceImpl(); 
    } 

} 

그리고 내 테스트 파일 : 여기

는 내가 뭐하는 거지의 샘플입니다. UserServiceTest.java

package com.springtest.test.services; 

import static org.junit.Assert.*; 
import org.junit.Test; 
import org.springframework.beans.factory.annotation.Autowired; 
import com.springtest.pojo.User; 
import com.springtest.services.UserService; 
import org.junit.runner.RunWith; 
import org.springframework.test.context.ContextConfiguration; 
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 
import com.springtest.test.configuration.*; 

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(classes={ JpaTestConfig.class, 
       ServiceConfig.class}) 

public class UserServiceTest { 

    @Autowired 
    private UserService userService; 

    @Test 
    public void testCreateAndRetrieve() { 
    String json = "{\"firstName\": \"John\", \"lastName\": \"Doe\"}"; 
    User user = userService.create(json); 
    assertEquals("John", user.getFirstName()); 
    } 
} 

내 서비스 콩 :

package com.springtest.services; 

    import java.util.List; 

    import javax.persistence.EntityManager; 
    import javax.persistence.PersistenceContext; 
    import javax.persistence.PersistenceContextType; 
    import javax.persistence.criteria.CriteriaQuery; 
    import org.springframework.stereotype.Service; 
    import org.springframework.transaction.annotation.Transactional; 
    import com.google.gson.GsonBuilder; 
    import com.springtest.pojo.User; 

    @Service 
    public class UserServiceImpl implements UserService { 

     @PersistenceContext(type=PersistenceContextType.EXTENDED) 
     EntityManager em; 

     @Transactional 
     public User create(String json) { 
      User user = new GsonBuilder().create().fromJson(json, User.class); 
      em.persist(user); 
      return user; 
     } 

    } 

그리고 내 Entity 클래스 : 요약에서

package com.springtest.pojo; 

import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.Id; 

@Entity 
public class User { 

    @Id 
    @GeneratedValue 
    private Integer id; 
    private String firstName; 
    private String lastName; 

    public Integer getId() { 
     return id; 
    } 

    public void setId(Integer id) { 
     this.id = id; 
    } 

    public String getFirstName() { 
     return firstName; 
    } 

    public void setFirstName(String firstName) { 
     this.firstName = firstName; 
    } 

    public String getLastName() { 
     return lastName; 
    } 

    public void setLastName(String lastName) { 
     this.lastName = lastName; 
    } 

} 

, 어떻게 내 자바에 법인을 등록 할 파일 @Configuration 클래스?

감사합니다,

+1

당신은'lcemfb.setPackagesToScan (new String [] { "com.jverstry"});'패키지/com.jverstry'를 가진 어떤 클래스/엔티티도 볼 수 없습니다. – Rembo

답변

1

문제는 내 JpaTestConfiguration 파일에 패키지 스캐너이었다. 보다 구체적으로,이 라인은 :

lcemfb.setPackagesToScan(new String[] {"com.springtest.pojo"}); 

@Entity 주석 클래스 패키지를 찾아 볼 것입니다. 팁을 @Rembo 고맙습니다.

관련 문제