我从未对测试Play应用程序的方式感到百分百满意。我已经确定了已经使用了一段时间的方法,但是感觉有点,而且我缺少一些简单的东西。
我使用SQLite,并且有一个名为default
的数据库配置,该配置在测试conf文件中被覆盖:
application.conf
slick.dbs.default {
profile = "slick.jdbc.SQLiteProfile$"
db.driver = "org.sqlite.JDBC"
db.url = "jdbc:sqlite:defaultDB.sqlite"
}
application.test.conf
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"
}
从测试配置中可以看到,我喜欢使用内存数据库进行测试。我出于某些原因喜欢使用内存中的数据库进行测试
我有2套演进脚本。一个存储在evolutions/default/<n>.sql
下的开发/生产数据库,另一个存储在evolutions/test/<n>.sql
下的测试数据库。
在测试中,我使用Injecting
特性将数据库注入测试套件并运行test
演变,如下所示:
[TestName] Spec.scala
class MySpec extends PlaySpec with BeforeAndAfterAll with GuiceOneAppPerSuite with Injecting {
import ThisClassLoaderEvolutionsReader.evolutions
override def beforeAll(): Unit = {
super.beforeAll()
val db = inject[DBApi].database("default")
Evolutions.applyEvolutions(db, SimpleEvolutionsReader.forDefault(evolutions("test") :_*))
}
override def afterAll(): Unit = {
super.afterAll()
val db = inject[DBApi].database("default")
Evolutions.cleanupEvolutions(db)
}
"My Test" should {
"do something useful" in {
...
}
}
}
我不喜欢这种方法:
我的方法似乎明智吗?是否有在Play上处理测试的公认方法?
答案 0 :(得分:0)
我为这个确切的问题而苦苦挣扎-实际上,我什至无法完成上述工作。我很想知道答案是否正确。