2
我學習Scala和playframework,而開發一個簡單的應用程序。有一件事使我感到挫折。我擁有強大的C#背景,並習慣於以經典術語進行單元測試 - 嘲笑底層服務並僅測試給定類中的代碼。
而問題是 - 如何單元測試一個playframework應用程序的書面是斯卡拉? playframework手冊提出的測試方法 - 是一種集成測試,這是很好的,但不是我需要的。特別是 - 如何模擬數據訪問層?
我學習Scala和playframework,而開發一個簡單的應用程序。有一件事使我感到挫折。我擁有強大的C#背景,並習慣於以經典術語進行單元測試 - 嘲笑底層服務並僅測試給定類中的代碼。
而問題是 - 如何單元測試一個playframework應用程序的書面是斯卡拉? playframework手冊提出的測試方法 - 是一種集成測試,這是很好的,但不是我需要的。特別是 - 如何模擬數據訪問層?
通常需要創建模擬對象,因爲在測試之前不得不在應用程序中加載過多的依賴關係,從而無法隔離測試。在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)
}
}
}
}
http://stackoverflow.com/questions/10053424/mock-objects-in-play2-0/10114621#10114621 –
http://www.playframework.org/documentation/2.0/ScalaTest – 0xAX
@shk這是一個集成測試的例子。它使用真正的數據庫服務器測試整個應用程序。我問了單元測試,這是非常不同的方法。上面的鏈接導致一個很好的答案。 –