我的一些控制器的依賴於數據庫連接和結構如下:是否有可能模擬數據庫連接進行功能測試,以及如何?
def getAll(revId: Muid) = Action { implicit request =>
DB.withConnection { implicit connection =>
...
我想爲它創建一個單元測試,所有嘲笑依賴性,包括連接爲好。現在,依賴關係的注入很容易通過Guice完成。但是,我正在努力尋找一種方法來模擬隱式連接。最終,測試正在試圖連接到我的默認數據庫。
鑑於這種情況,甚至有可能嘲笑暗示,以及如何?
UPDATE
所以,用這個東西了,而玩後,我得到了以下內容: 我的測試類:
class ChecklistCreationScheduler @Inject()(jobScheduler: JobScheduler,
dBApi: DBApi,
futureChecklistRepository: FutureChecklistRepository) extends ClassLogger{
def scheduleSingleFutureChecklistJob(futureChecklistId: Muid): Unit = {
logger.info(s"Preparing to schedule one time future checklist job for future checklist id '${futureChecklistId.uuid}'")
val db = dBApi.database("default")
logger.info("Database" + db)
db.withConnection { implicit connection =>
logger.info("Connection" + connection)
...
}
}
}
而且測試:
"ChecklistCreationScheduler#scheduleSingleFutureChecklistJob" should {
"schedule a single job through a scheduler" in {
val futureChecklistId = Muid.random()
val jobScheduler = mock[JobScheduler]
val connection = mock[Connection]
val DB = mock[Database]
DB.getConnection returns connection
val dbApi = mock[DBApi]
when(dbApi.database("default")).thenReturn(DB)
val futureChecklistRepository = mock[FutureChecklistRepository]
doReturn(Option.empty).when(futureChecklistRepository).getById(futureChecklistId)(connection)
val chCreationScheduler = new ChecklistCreationScheduler(jobScheduler, dbApi, futureChecklistRepository)
chCreationScheduler.scheduleSingleFutureChecklistJob(futureChecklistId) must throwA[UnexpectedException]
}
}
當我執行測試時,似乎執行甚至沒有進入withConnection
的塊。 (我從來沒有去過這條線:logger.info("Connection" + connection)
)。
任何想法?
你可以看看[Acolyte](http://acolyte.eu.org/) – cchantep
你真的需要嘲笑連接嗎?或者你需要嘲笑'withConnection'調用返回的內容嗎?另外,你真的需要這個單元測試嗎? – marcospereira
好吧,我只想要注入我自己的模擬「隱式連接」。至於單元測試,我試圖避免完整的集成測試。 –