【问题标题】:Play framework tests with beforeeach使用 beforeeach 进行框架测试
【发布时间】:2013-05-18 03:30:51
【问题描述】:

我正在尝试使用 Scalatest 在 Play Framework 2.1 测试套件中设置和拆除数据库

我们实际上已经设置了

 running(FakeApplication()){

 }

但我想在每次单独测试之前设置数据库,根据我对 Scalatest 的理解,您可以使用

override def beforeEach(){

}

所以我尝试从内部运行几个 Squeryl 查询,并得到一些关于 Session 被关闭的错误。

然后我尝试在 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 设置方法,还是只需要在每个测试的顶部使用一些引导程序来调整它?

谢谢

汤姆

【问题讨论】:

    标签: scala playframework-2.0 scalatest


    【解决方案1】:

    睡了一觉,然后试着放了

    running(FakeApplication()) {
    }
    

    override def beforeEach(){
    
    }
    

    代码,似乎可以解决问题,但不确定它对 Play 框架的影响(如果有的话),但现在可以完成工作。

    【讨论】:

    • 我也这样做了,也没有任何问题。如果您找到任何东西,请告诉我们:)
    【解决方案2】:

    BeforeAndAfterEach trait 中的beforeEach 方法只能用于 ScalaTest 测试,不能用于应用程序本身。

    它可以混入需要在运行每个测试之前和之后调用的方法套件

    所以是的,这个fixture 的创建是为了在套件运行每个测试之前进行一些设置。你可以阅读这个和其他一些 ScalaTest 固定装置here

    【讨论】:

    • 感谢 Alexlv,我知道它是如何工作的,但由于它与 play 框架一起运行,我还需要一个运行(假)应用程序,以便在测试阶段与测试进行对话。
    猜你喜欢
    • 1970-01-01
    • 2019-12-17
    • 1970-01-01
    • 2011-03-05
    • 2012-08-16
    • 2018-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多