2010-12-22 2 views
0

단위 테스트를 실행하기 전에 데이터베이스를 새로운 스키마로 채워야하는 Java 프로젝트가 있습니다. Maven은 프로젝트를 빌드하는 데 사용됩니다. Unitils는 단위 테스트에 사용됩니다. ( Java Project의 단위 테스트 용 데이터베이스 스키마 자동 업데이트

  1. 드롭/데이터베이스 스크립트를 생성 (dropcreate.sql)
  2. 스키마 스크립트 (schema.sql)
  3. 참조 데이터 스크립트

    내 계획은이 순서대로 다음 스크립트를 실행하는 것이 었습니다 reference.sql) 참조 데이터 스크립트가 더 이상 SCHE 일치하는 경우 내가 볼 수없는 측면 혜택으로

ma가 실행되지 않으면.

빌드 할 때 스키마 스크립트를 생성하기 위해 Maven 용 hibernate3 플러그인을 사용했습니다.

  • 001_dropcreate.sql
  • 002_schema.sql
  • : 나는 또한과 같이, 실행 순서에 모든 숫자와 같은 디렉토리 (대상/dbscripts)에 이러한 스크립트를 복사 할 받는다는-antrun - 플러그인을 사용했습니다
  • 003_reference.sql

계획은 Unitils Tutorial에서 언급 한 바와 같이 unitils 사용하여, 스크립트를 실행의 DBMaintainer 부분을 가지고 있었다 다음 (소독) SRC/테스트/자원 파일을 unitils.properties :

 
database.driverClassName=com.sybase.jdbc3.jdbc.SybDriver 
database.url=jdbc:sybase:Tds:mydatabase.server.example.com:9000/my_database 
database.userName=myusername 
database.password=mypassword 
database.dialect=org.hibernate.dialect.SybaseDialect 
database.schemaNames=dbo 
DatabaseModule.Transactional.value.default=disabled 
org.unitils.core.dbsupport.DbSupport.implClassName=org.unitils.core.dbsupport.MsSqlDbSupport 
DbUnitModule.DataSet.loadStrategy.default=com.example.dao.SybaseCleanInsertLoadStrategy 
updateDataBaseSchema.enabled=true 
dbMaintainer.script.locations=target/dbscripts 
dbMaintainer.cleanDb.enabled=true 
dataSetStructureGenerator.xsd.dirName=target/xsd 

Unitils는 데이터 집합을로드하고 단위 테스트를 훌륭하게 수행하지만 스크립트를 실행하지 않습니다. 나는 그것이 내가 바라보고있는 간단한 무엇인가라고 확신한다.

다른 대안은 sql-maven-plugin을 사용하는 것이었지만 process-test-resources 중에 실행할 수 없었기 때문에 지금 당장 생각해 보았습니다.

어떻게 실제로 SQL을 실행하게 할 수 있습니까? 가능하면 SQL을 실행할 수 없으면 어떻게 실패합니까?

답변

0

좀 더 자세한 정보를 제공해 주시겠습니까? 로그에 무엇인가 있었습니까? 예를 들면 다음과 같습니다 :
데이터베이스를 업데이트해야하는지 확인합니다.

테스트 실행 시점에 target/dbscripts에 스크립트가 있습니까?

updateDataBaseSchema 속성이 false로 설정된 unitils-local.properties가로드 되었습니까?

지금 unitils는 여전히 자신의 dbmaintainer 버전을 사용합니다. 다음 릴리스에서는 dbmaintain과 완전히 통합 될 것입니다 (알파는 다음 주에 출시 될 예정입니다).

또한 dbmaintain에는 데이터베이스 스크립트를 실행하는 데 필요한 maven 작업이 있습니다. www.dbmaintain을 살펴보십시오.자세한 정보는 org. DBUnit가 인생을 더 쉽게 만드는처럼

brgds, 팀

+0

개발 컴퓨터의 파일 검색 결과 unitils-local.properties가 표시되지 않습니다. "데이터베이스를 업데이트해야하는지 확인 중입니다."라는 메시지가 표시됩니다. "database.DatabaseModule"다음에 존재하지만 이후에는 database.DatabaseModule에서 가져온 것이 없습니다. 이전에 데이터베이스가 unitils로 업데이트 된 적이 없었습니다. 빈 데이터베이스로 시작해야합니까? –

+0

'데이터베이스가 최신 상태입니다.'또는 '데이터베이스 업데이트 스크립트가 발견되어 데이터베이스에서 실행됩니다.'와 같은 로깅을받지 못합니까? 그렇지 않다면, 예를 들어 dbmaintain_scripts 테이블이 존재하지 않는다는 예외가 있다고 의심됩니다. 테스트가 실패 했습니까? IDE에서 테스트를 실행할 수 있습니까? 누락 된 dbmaintain_scripts 테이블 (그리고 단위 테스트 데이터베이스) 인 경우 dbMaintainer.autoCreateExecutedScriptsTable = true를 설정하여 자동으로 만들 수 있습니다. –

+0

도움을 주셔서 감사합니다. 그러나 개발 팀이 Sybase가 원인 일 수 있다고 판단했습니다. 우리는 unitils, Maven SQL 플러그인, sqsh 및 기타 여러 도구를 사용해 보았습니다. 그러나 문제없이이 스크립트를 실행하는 유일한 방법은 기본 ISQL입니다. 궁극적으로 우리가이 방법으로 Unitils를 사용할 수 있도록 Sybase의 이사를 계획하고 있습니다. 모든 도움에 다시 한 번 감사드립니다. –

0

뭔가를 사용겠습니까? 그것은 시험을위한 테이블의 생성 &을 보살 피고있다.

+0

프로젝트에는 현재 이미 Unitils를 사용하는 90 개 이상의 테스트 클래스가 있습니다. 이 시점에서 변경하는 것은 상당한 노력이 될 것입니다. –

관련 문제