自动更新Java项目单元测试的数据库模式

时间:2010-12-22 03:37:24

标签: java database unit-testing schema

我有一个Java项目需要在执行单元测试之前使用新模式填充数据库。 Maven用于构建项目。 Unitils用于单元测试。

我的计划是按以下顺序执行以下脚本:

  1. 删除/创建数据库脚本(dropcreate.sql)
  2. 架构脚本(schema.sql)
  3. 参考数据脚本(reference.sql)
  4. 作为附带好处,我可以看到,如果参考数据脚本无法执行,它将不再与模式匹配。

    我已经使用Maven的hibernate3插件在构建时生成模式脚本。我还使用maven-antrun-plugin将这些脚本全部复制到相同的目录(target / dbscripts)中,并按执行顺序排列数字,如下所示:

    • 001_dropcreate.sql
    • 002_schema.sql
    • 003_reference.sql

    计划是让单元的DBMaintainer部分运行脚本,如Unitils Tutorial所述,使用src / test / resources中的以下(已清理的)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,但我无法在进程测试资源中执行它,所以我现在已经提出了这个想法。

    如何让Unitils实际执行SQL,如果可能的话,如果SQL无法执行则会失败?

2 个答案:

答案 0 :(得分:0)

你能提供更多信息吗? 日志中有什么东西吗?它应该提到类似的东西:
检查数据库是否必须更新。

您确定在测试执行时目标/ dbscripts中有脚本吗?

是否加载了unitils-local.properties,其中up​​dateDataBaseSchema属性设置为false?

现在单元仍然使用它自己的dbmaintainer版本。在下一个版本中,将与dbmaintain本身进行完全集成(alpha将在下周推出)。

请注意,dbmaintain还具有运行数据库脚本的maven任务。请访问www.dbmaintain.org了解更多信息。

brgds, 添

答案 1 :(得分:0)

使用类似DBUnit之类的东西会让生活更轻松吗?它关注创造和测试表的数量。