Scala Play2 路由器/控制器测试,无需访问数据库

Posted

技术标签:

【中文标题】Scala Play2 路由器/控制器测试,无需访问数据库【英文标题】:Scala Play2 router/controller test without hitting database 【发布时间】:2015-10-07 18:02:10 【问题描述】:

我有一个通过路由器的简单控制器测试:

 "returns all reservations" should 
    running(FakeApplication()) 
      val Some(result) = route(FakeRequest(GET, "/reservations?envId=560d89ec5393af5d00bcfdf1"))

      mustBeValidResponse(result)
      contentAsString(result) must contain("environmentId")
    
  

但正如您所见,它需要一个 ID 作为 URL 的一部分,这意味着我的测试依赖于数据库中的数据,这是不好的。如何创建测试将运行的夹具或其他东西,以便测试运行而不实际依赖数据库中的数据?

【问题讨论】:

【参考方案1】:

我假设访问数据库的代码不是直接在控制器中,而是在另一个注入到控制器的类中。您应该使用 Play 2.4 版中引入的模块系统。然后你需要的是替换通过模拟访问数据库的真实实现。更多信息在这里: https://www.playframework.com/documentation/2.4.x/ScalaTestingWithGuice#Overriding-bindings-in-a-functional-test

【讨论】:

你是对的,有一个数据库管理器。我会看看你链接到的文档。

以上是关于Scala Play2 路由器/控制器测试,无需访问数据库的主要内容,如果未能解决你的问题,请参考以下文章

在 Play 2.4 scala 中禁用单个测试

在 Play 2.1 和 Scala 中为文件上传编写测试用例

Play 2.2:使用 Play Caching (Scala) 对代码进行单元测试时出现问题

在 Play2 Scala 模板中声明变量

在 Play2 / Scala 中从内存中的 MultipartFormData 中提取文件

Jooq postgre 在 play2.5 scala 中插入错误