2011-07-04 4 views
0

제 프로젝트에는 많은 hbm.xml 파일이 있습니다.이 파일들로부터 java 클래스와 db를위한 sql을 생성합니다. hbm.xml 파일 내의 시맨틱 오류는 현재 상황에서 실제로 성가신 buildSessionFactory()를 호출 한 후 나에게 보여진다. 약간 다른 설정 (나를 대신 사용하는 더비)을 사용하여 저를 위해 테스트 클래스를 만들고 싶습니다. 현재의 "솔루션"은 다음과 같습니다.Hibernate를 이용한 데이터 모델 테스팅

String dbName = "test"; 

    try{ 
     SessionFactory fact = new Configuration().configure() 
               .setProperty("hibernate.connection.driver_class","org.apache.derby.jdbc.EmbeddedDriver") 
               .setProperty("hibernate.connection.url","jdbc:derby:" + dbName + ";create=true") 
               .setProperty("hibernate.connection.username","") 
               .setProperty("hibernate.connection.password","") 
               .setProperty("hibernate.dialect","org.hibernate.dialect.DerbyDialect") 
               .setProperty("hibernate.hbm2ddl.auto","create-drop") 
               .buildSessionFactory(); 
     assertNotNull(fact); 

     Session s = fact.openSession(); 
     assertNotNull(s); 

     s.close(); 
     fact.close(); 
    }catch(Throwable t){ 
     fail(t.getMessage()); 
    } 

그러나 이것은 내 관점에서 보면별로 만족스럽지 않습니다. 명명 된 쿼리가 모두 괜찮은지 확인하고 싶습니다. 자동화 된 프로세스에서 이러한 종류의 테스트를 수행 할 수있는 방법이 있습니까?

필자의 질문 중 두 번째 부분은 derby가 테스트를위한 좋은 선택이라면 왜 테스트가 끝난 후에 자동으로 db를 삭제할 수 없습니까? 난 내가 변수 DBNAME 멋진 아닌 내 프로젝트 디렉토리에있는 더비 파일과 같은 이름의 디렉토리와 끝까지이 솔루션을 사용하여

"jdbc:derby:" + dbName + ";create=true;drop=true" 

같은 URL에 매개 변수를 지정하고 싶습니다.

답변

0

명명 된 쿼리를 테스트하려는 경우 해결책은 가짜 인수로 테스트에서 호출하는 것일 수 있습니다 (쿼리는 아무 것도 반환하지 않지만 적어도 최대 절전 모드에서는이를 확인해야합니다).

s.getNamedQuery("Whatever").setParameters(...).execute/query 

이제는 모든 검색어의 이름을 쉽게 가져올 수 없다는 문제가 있습니다.

더비의 DB에 관해서는, 당신은 "수동으로"(예를 들어,의 tearDown에?) 테스트의 끝에서 생성 된 폴더를 제거 얻을 수

그것의 위치처럼 보인다 자바 속성을 controled 할 수 생성 된 더비베이스 :

http://db.apache.org/derby/manuals/develop/develop14.html

http://db.apache.org/derby/manuals/develop/develop12.html#HDRSII-DEVELOP-13018

+0

나는 API를 통해 보았다하지만 난 다시 모든 명명 된 쿼리 정도 나 줄 것이다 방법을 찾을 수 없습니다. 그래서 여전히 문제가 남아 있습니다. 더비 db를 삭제하려면 디렉토리 경로를 알아야합니다. 어떻게 결정됩니까? –

+0

폴더의 위치를 ​​편집 할 수있는 것 같습니다. 일부 링크로 내 대답을 편집했습니다. 명명 된 쿼리의 목록을 얻는 방법에 관해서는 알 수 없습니다. – phtrivier

+0

감사합니다. 나는 이미 이것을 구현할 수 있음을 깨달았습니다. 이미 java_temp_dir^^을 사용하고 있습니다. 그러나 명명 된 쿼리의 테스트는 여전히 남아 있습니다. –

관련 문제