scala - 如何删除在 Play 框架和 slick 的单元测试中创建 session 的代码

标签 scala playframework playframework-2.1 slick

我正在使用 play 2.0 和 slick。所以我为这样的模型编写单元测试。

describe("add") {
  it("questions be save") {
    Database.forURL("jdbc:h2:mem:test1", driver = "org.h2.Driver") withSession {
      // given
      Questions.ddl.create
      Questions.add(questionFixture)
      // when
      val q = Questions.findById(1)
      // then
      // assert!!!
    }
  }
}

它运行良好,但每个单元测试都会重复以下代码段。

Database.forURL("jdbc:h2:mem:test1", driver = "org.h2.Driver") withSession {
  Questions.ddl.create
  // test code
}

所以,我想将这段代码移动到 block 之前,像这样。

before {
    Database.forURL("jdbc:h2:mem:test1", driver = "org.h2.Driver") withSession {
        Questions.ddl.create
    }
}

describe("add") {
  it("questions be save") {
    // given
    Questions.add(questionFixture)
    // when
    val q = Questions.findById(1)
    // then
    // assert!!!
    }
  }
}

我可以在 before block 中创建 session ,然后在单元测试中使用该 session 吗?

最佳答案

您可以使用 createSession() 并自行处理生命周期。我习惯了 JUnit,我不知道您使用的测试框架的具体细节,但它应该看起来像这样:

// Don't import threadLocalSession, use this instead:
implicit var session: Session = _

before {
  session = Database.forURL(...).createSession()
}

// Your tests go here

after {
  session.close()
}

关于scala - 如何删除在 Play 框架和 slick 的单元测试中创建 session 的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16758228/

相关文章:

java - Akka - 对象序列化期间的 StackOverflowError

scala - 构造函数(特征)不能应用于(类扩展特征)

playframework - 如何运行同一个 Play 的两个实例!框架应用?

scala - 在 Play2 SecureSocial 上,POST 在 SecureadAction 之后作为 GET 执行

scala - 操作后重定向到上一页的模式

scala - Slick:检索插入值的ID

Scala 删除数组中重复项的方法

java - 剖析规范 Play Framework webapp 最佳实践

exception - Play 框架中抛出的无法解释的 ClassCastException

scala - Play Framework 2.1 + ReactiveMongo - 填充多个下拉列表