2012-11-02 111 views
2

可能重複:
Mock Objects in Play[2.0]如何單元測試playframework 2應用

我學習Scala和playframework,而開發一個簡單的應用程序。有一件事使我感到挫折。我擁有強大的C#背景,並習慣於以經典術語進行單元測試 - 嘲笑底層服務並僅測試給定類中的代碼。

而問題是 - 如何單元測試一個playframework應用程序的書面是斯卡拉? playframework手冊提出的測試方法 - 是一種集成測試,這是很好的,但不是我需要的。特別是 - 如何模擬數據訪問層?

+2

http://stackoverflow.com/questions/10053424/mock-objects-in-play2-0/10114621#10114621 –

+0

http://www.playframework.org/documentation/2.0/ScalaTest – 0xAX

+0

@shk這是一個集成測試的例子。它使用真正的數據庫服務器測試整個應用程序。我問了單元測試,這是非常不同的方法。上面的鏈接導致一個很好的答案。 –

回答

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) 
     } 
    } 
    } 
}