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.1 和 Scala 中为文件上传编写测试用例
Play 2.2:使用 Play Caching (Scala) 对代码进行单元测试时出现问题