在之前玩框架测试

时间:2013-05-22 22:26:37

标签: scala playframework-2.0 scalatest

我正在尝试使用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设置方法,还是只需要在每次测试的顶部使用一些引导程序进行操作?

由于

汤姆

2 个答案:

答案 0 :(得分:2)

睡了一会然后尝试了

running(FakeApplication()) {
}

中的

override def beforeEach(){

}

代码,似乎可以解决这个问题,但不确定它对Play框架有什么影响,但是现在可以完成这项工作。

答案 1 :(得分:0)

来自BeforeAndAfterEach trait的beforeEach方法只能在ScalaTest测试中使用,但不能在应用程序本身中使用。

  

它可以混合到套件中,需要在运行每个测试之前和之后调用

所以是的,创建此夹具是为了在套件运行每个测试之前进行一些设置。您可以阅读此内容以及其他一些ScalaTest灯具here