사용자 도구

사이트 도구


java:hibernate:test

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
java:hibernate:test [2016/09/18 14:10]
kwon37xi
java:hibernate:test [2016/09/24 15:11] (현재)
kwon37xi
줄 11: 줄 11:
     * ''org.hibernate:hibernate-testing:${version.org.hibernate}'' 에 의존성을 가지고서 ''ORMUnitTestCase''를 참조하여 수정해서 만들면 좋다.     * ''org.hibernate:hibernate-testing:${version.org.hibernate}'' 에 의존성을 가지고서 ''ORMUnitTestCase''를 참조하여 수정해서 만들면 좋다.
   * [[https://github.com/hibernate/hibernate-orm/wiki/Hibernate-JUnit-Infastructure|Hibernate JUnit Infrastructure]]   * [[https://github.com/hibernate/hibernate-orm/wiki/Hibernate-JUnit-Infastructure|Hibernate JUnit Infrastructure]]
 +
 +===== hibernate-testing 사용시 Jboss Logging 문제 =====
 +hibernate-testing 사용시 아래와 같이 jboss logging에 문제가 생길 수 있다.
 +<code>
 +java.lang.NoSuchMethodError: org.jboss.logging.Logger.getMessageLogger(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Object;
 +</code>
 +
 +이 이유는 hibernate-testing이 의존하고 있는 ''jboss-common-core'' -> ''org.jboss.logging:jboss-logging-spi''가 ''jboss-logging''과 동일한 패키지의 ''Logger'' 클래스를 구현하고 있어서 두 라이브러리간 충돌이 발생하기 때문이다.
 +''org.jboss.logging:jboss-logging-spi'' exclude 처리한다.
 +
 +<code groovy>
 +testCompile(group: 'org.hibernate', name: 'hibernate-testing', version: hibernateVersion) {
 +    exclude group: 'org.jboss.logging', module: 'jboss-logging-spi'
 +}
 +</code>
 +
 +===== Hibernate 4.2 미만 Spock Spec 기본 뼈대 =====
 +<code groovy>
 +/**
 + * Hibernate/JPA testing specification.
 + */
 +abstract class AbstractHibernateSessionSpec extends Specification {
 +
 +    Configuration configuration
 +
 +    SessionFactory sf
 +
 +    Session session
 +
 +    void setup() {
 +        configuration = new Configuration();
 +
 +        configuration.addAnnotatedClass(Article)
 +
 +        configuration.setProperty("hibernate.show_sql", "false")
 +        configuration.setProperty("hibernate.format_sql", "true")
 +        configuration.setProperty("hibernate.dialect", "org.hibernate.dialect.H2Dialect")
 +        configuration.setProperty("hibernate.connection.driver_class", "org.h2.Driver")
 +        configuration.setProperty("hibernate.connection.url", "jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1")
 +        configuration.setProperty("hibernate.connection.username", "sa")
 +        configuration.setProperty("hibernate.hbm2ddl.auto", "create-drop")
 +
 +        // hibernate 4.2.x 미만 의 ServiceRegistryBuilder 설정.
 +        // 4.x 끼리도 버전마다 조금씩 달라질 수 있다.
 +        def srBuilder = new ServiceRegistryBuilder().applySettings(configuration.getProperties())
 +        def serviceRegistry = srBuilder.buildServiceRegistry()
 +
 +        sf = configuration.buildSessionFactory(serviceRegistry);
 +
 +        session = sf.openSession()
 +    }
 +
 +    void cleanup() {
 +        session.close()
 +        sf.close()
 +    }
 +}
 +
 +// 테스트시 직접 Connection을 맺어 쿼리를 실행하고 검사하고 싶을 경우
 +session.doWork({ Connection con ->
 +    groovy.sql.Sql sql = new groovy.sql.Sql(con)
 +    // work with Sql object
 +} as Work)
 +</code>
 +
 +===== Hibernate 5.2 / Java 8 Test with lambda =====
 +  * [[http://in.relation.to/2016/09/15/integration-tests-and-java-8-lambdas/|How to simplify JPA and Hibernate integration testing using Java 8 lambdas]]
 +  * ''hibernate-testing'' 의존성을 걸고 다음과 같이 테스트하면 ''EntityManager''나 ''Session'' 의 Life Cycle을 자동으로 관리하면서 테스트 할 수 있다.
 +
 +<code java>
 +import static org.hibernate.testing.transaction.TransactionUtil.*;
 +
 +doInJPA( this::entityManagerFactory, entityManager -> {
 +    entityManager.persist( item );
 +    assertTrue( entityManager.contains( item ) );
 +} );
 +
 +// or
 +doInHibernate( this::sessionFactory, session -> {
 +    session.persist( item );
 +    assertTrue( session.contains( item ) );
 +} );
 +</code>
 +
 +
java/hibernate/test.1474177228.txt.gz · 마지막으로 수정됨: 2016/09/18 14:10 저자 kwon37xi