我正在尝试使用Scalatest
在Play Framework 2.1测试套件中设置和拆除数据库我们实际上已经设置了
running(FakeApplication()){
}
但是我想在每次单独测试之前设置数据库,从我对Scalatest的理解中你可以用
进行override def beforeEach(){
}
所以我尝试从内部运行几个Squeryl查询,并且在会话关闭时遇到了一些错误。
然后我尝试在beforeEach方法中创建一个会话:
override def beforeEach(){
import org.squeryl.SessionFactory
Class.forName("org.postgresql.Driver").newInstance()
// classOf[org.postgresql.Driver]
DriverManager.registerDriver(new org.postgresql.Driver)
val props = new Properties()
props.setProperty("user","db")
props.setProperty("password","db")
SessionFactory.concreteFactory = Some(()=>
Session.create(
java.sql.DriverManager.getConnection("jdbc:postgresql://127.0.0.1/db", props),
new PostgreSqlAdapter))
CloudUsers.truncateUsers()
Servers.truncateServers()
}
这清除了会话错误,但我现在得到:
Could not run test Controllers.UserTest: java.lang.ExceptionInInitializerError
Throwable escaped the test run of 'Controllers.UserTest': java.lang.ExceptionInInitializerError
java.lang.ExceptionInInitializerError
....
Caused by: java.lang.RuntimeException: There is no started application
简而言之,我可以在Play中运行beforeEach设置方法,还是只需要在每次测试的顶部使用一些引导程序进行操作?
由于
汤姆
答案 0 :(得分:2)
睡了一会然后尝试了
running(FakeApplication()) {
}
中的
override def beforeEach(){
}
代码,似乎可以解决这个问题,但不确定它对Play框架有什么影响,但是现在可以完成这项工作。
答案 1 :(得分:0)
来自BeforeAndAfterEach trait的beforeEach方法只能在ScalaTest测试中使用,但不能在应用程序本身中使用。
它可以混合到套件中,需要在运行每个测试之前和之后调用 。
所以是的,创建此夹具是为了在套件运行每个测试之前进行一些设置。您可以阅读此内容以及其他一些ScalaTest灯具here