Playframework 播放+;光滑的+;进化测试建议

Playframework 播放+;光滑的+;进化测试建议,playframework,playframework-evolutions,Playframework,Playframework Evolutions,我从来没有100%满意过我测试游戏应用程序的方式。我已经确定了一种我已经使用了一段时间的方法,但它感觉有点粗糙,我错过了一些简单的东西 我使用SQLite,有一个名为default的单一数据库配置,我在测试配置文件中覆盖该配置: application.conf slick.dbs.default { profile = "slick.jdbc.SQLiteProfile$" db.driver = "org.sqlite.JDBC" db.url = "jdbc:sqlite:de

我从来没有100%满意过我测试游戏应用程序的方式。我已经确定了一种我已经使用了一段时间的方法,但它感觉有点粗糙,我错过了一些简单的东西

我使用SQLite,有一个名为
default
的单一数据库配置,我在测试配置文件中覆盖该配置:

application.conf

slick.dbs.default {
  profile = "slick.jdbc.SQLiteProfile$"
  db.driver = "org.sqlite.JDBC"
  db.url = "jdbc:sqlite:defaultDB.sqlite"
}
include "application.conf"

play = {
  evolutions.enabled = false
}

slick.dbs.default {
  profile = "slick.jdbc.SQLiteProfile$"
  db.driver = "org.sqlite.JDBC"
  db.url = "jdbc:sqlite:memory;DB_CLOSE_DELAY=-1"
}
application.test.conf

slick.dbs.default {
  profile = "slick.jdbc.SQLiteProfile$"
  db.driver = "org.sqlite.JDBC"
  db.url = "jdbc:sqlite:defaultDB.sqlite"
}
include "application.conf"

play = {
  evolutions.enabled = false
}

slick.dbs.default {
  profile = "slick.jdbc.SQLiteProfile$"
  db.driver = "org.sqlite.JDBC"
  db.url = "jdbc:sqlite:memory;DB_CLOSE_DELAY=-1"
}
从我的测试配置中可以看到,我喜欢使用内存中的数据库进行测试。出于几个原因,我喜欢使用内存中的db进行测试

  • 我发现在SQL文件中管理测试数据更容易
  • 测试完成后,数据库将自动转储
  • 移动到另一台dev机器很容易
  • 我有两套进化脚本。一组用于存储在
    evolutions/default/.sql
    下的dev/prod数据库,另一组用于存储在
    evolutions/test/.sql
    下的测试数据库

    在我的测试中,我使用
    注入
    特性将数据库注入测试套件,并运行
    测试
    演进,如下所示:

    [TestName]Spec.scala

    class MySpec使用before和afterall扩展PlaySpec,使用GuiceOneAppPerSuite和injection{
    导入此ClassLoaderEvolutionsReader.evolutions
    覆盖def beforeAll():单位={
    super.beforeAll()
    val db=inject[DBApi]。数据库(“默认值”)
    进化。应用进化(db,SimpleEvolutionsReader.forDefault(进化(“测试”):*)
    }
    覆盖def afterAll():单位={
    超级
    val db=inject[DBApi]。数据库(“默认值”)
    进化。清理进化(db)
    }
    “我的测试”应该{
    “做点有用的事”在{
    ...
    }
    }
    }
    
    我不喜欢这种方法的一些地方:

  • 我将我的测试数据存储在进化脚本中,它工作得很好,但似乎是错误的
  • 我需要维护2套进化脚本
  • 为了运行测试,我需要一个应用程序,以便注入数据库。这似乎太“重”
  • 我的方法是否合理?是否有一种普遍认可的方法来处理正在进行的测试