단위 테스트를 실행하기 전에 데이터베이스를 새로운 스키마로 채워야하는 Java 프로젝트가 있습니다. Maven은 프로젝트를 빌드하는 데 사용됩니다. Unitils는 단위 테스트에 사용됩니다. ( Java Project의 단위 테스트 용 데이터베이스 스키마 자동 업데이트
- 드롭/데이터베이스 스크립트를 생성 (dropcreate.sql)
- 스키마 스크립트 (schema.sql)
- 참조 데이터 스크립트
내 계획은이 순서대로 다음 스크립트를 실행하는 것이 었습니다 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을 실행할 수 없으면 어떻게 실패합니까?
개발 컴퓨터의 파일 검색 결과 unitils-local.properties가 표시되지 않습니다. "데이터베이스를 업데이트해야하는지 확인 중입니다."라는 메시지가 표시됩니다. "database.DatabaseModule"다음에 존재하지만 이후에는 database.DatabaseModule에서 가져온 것이 없습니다. 이전에 데이터베이스가 unitils로 업데이트 된 적이 없었습니다. 빈 데이터베이스로 시작해야합니까? –
'데이터베이스가 최신 상태입니다.'또는 '데이터베이스 업데이트 스크립트가 발견되어 데이터베이스에서 실행됩니다.'와 같은 로깅을받지 못합니까? 그렇지 않다면, 예를 들어 dbmaintain_scripts 테이블이 존재하지 않는다는 예외가 있다고 의심됩니다. 테스트가 실패 했습니까? IDE에서 테스트를 실행할 수 있습니까? 누락 된 dbmaintain_scripts 테이블 (그리고 단위 테스트 데이터베이스) 인 경우 dbMaintainer.autoCreateExecutedScriptsTable = true를 설정하여 자동으로 만들 수 있습니다. –
도움을 주셔서 감사합니다. 그러나 개발 팀이 Sybase가 원인 일 수 있다고 판단했습니다. 우리는 unitils, Maven SQL 플러그인, sqsh 및 기타 여러 도구를 사용해 보았습니다. 그러나 문제없이이 스크립트를 실행하는 유일한 방법은 기본 ISQL입니다. 궁극적으로 우리가이 방법으로 Unitils를 사용할 수 있도록 Sybase의 이사를 계획하고 있습니다. 모든 도움에 다시 한 번 감사드립니다. –