Некоторые из моих контроллеров полагаться на подключение к базе и структурирована следующим образом:Возможно ли подключить соединение БД в функциональном тестировании игры и как?
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
Ну, все, что я хочу, это уметь вводить мое собственное издеваемое «неявное соединение». Что касается модульного теста, я стараюсь избегать полного тестирования интеграции. –