我正在学习Scala和playframework,同时开发一个简单的应用程序。有一件事使我感到沮丧。我有很强的C#背景,并且习惯于用经典术语进行单元测试 - 模拟底层服务并仅测试给定类中的代码。
问题是 - 如何对编写的playframework应用程序进行单元测试是Scala? playframework手册提出的测试方法是一个集成测试,这很好,但不是我需要的东西。特别是 - 如何模拟数据访问层?
答案 0 :(得分:2)
如果在测试之前必须在应用程序中加载过多的依赖项而无法隔离测试,则通常需要创建模拟对象。在Play 2.X中测试数据访问层时,您没有此限制。因此,您需要做的就是使用Specs2 Specification
并使用FakeApplication(additionalConfiguration = inMemoryDatabase()
加载内存数据库
然后可以像这样编写完整的测试:
class ProjectSpec extends Specification {
"Project model" should {
"be created with id and name" in {
running(FakeApplication(additionalConfiguration = inMemoryDatabase())) {
val beforeCount = Project.count
val project = Project.create(Project("Test name", "Test description"))
project.id must beSome
project.name must equalTo("Test name")
Project.count must equalTo(beforeCount + 1L)
}
}
}
}