Я пытаюсь выполнить модульное тестирование метода, который использует следующее для понимания (все Daos являются ложными):
val dbAction = for {
a <- aDao.create(argumentObject.getA)
b <- bDao.create(argumentObject.getB)
_ <- cDao.batchCreate(argumentObject.getC)
d <- argumentObject.getOptionalD.map(dDao.create).getOrElse(DBIOAction.successful(<case class creation here>))
_ <- argumentObject.getOptionalE.map(eDao.batchCreate).getOrElse(DBIOAction.successful(()))
_ <- argumentObject.getOptionalF.map(fDao.batchCreate).getOrElse(DBIOAction.successful(()))
} yield a.id
db.executeTransactionally(dbAction).map {
case Failure(e) => throw new RuntimeException()
case Success(v) => v
}
DAO настроены на возврат DBIOActions, которые я могу отобразить в одномдействие и выполнение на БД (в этом случае executeTransactionally принимает результат и добавляет .transactionally.asTry
к методу db.run.
У меня возникла проблема при тестировании метода, частью которого он является - я хочу проверитьаргументы методов создания, но, несмотря на то, что я буквально повсюду бросаю точки останова и устанавливаю откровенно нелепые таймауты для блока eventually
, Mockito.verify () не регистрирует никаких взаимодействий ни с одним из этих методов создания, кроме самого первого вызова aDao.
Честно говоря, похоже, что только методы, необходимые для создания конечного результата для понимания, вызываются, а любые методы "побочного эффекта" игнорируются. Я могу удалить мои фиктивные настройки для всего, кромепервый вызов aDao и не меняйте вывод.
e: мой макет для установкиэтот раздел:
when(aDao.create(mockA)) thenReturn DBIOAction.successful(mockA)
val bCaptor = ArgumentCaptor.forClass[B, B](classOf[B])
when(bDao.create(bCaptor.capture())(any())) thenReturn DBIOAction.successful(mockB)
val cCaptor = ArgumentCaptor.forClass[Seq[C], Seq[C]](classOf[Seq[C]])
when(cDao.batchCreate(cCaptor.capture())(any())) thenReturn DBIOAction.successful(Some(1))
val fCaptor = ArgumentCaptor.forClass[Seq[F], Seq[F]](classOf[Seq[F]])
when(fDao.batchCreate(fCaptor.capture())(any())) thenReturn DBIOAction.successful(Some(2))
when(dao.executeTransactionally(isA(classOf[DBIOAction[Long, NoStream, Effect.All]]))).thenReturn(Future(Success(1L)))