Не удается заглушить несколько сложных вызовов методов с помощью Mockito (Scala)
Сегодня мой коллега и я боролись с трудностями, чтобы заглушить метод зависимости в одном из наших модульных тестов.
Тестируемый класс обслуживания выглядит примерно так:
class MongoChecklistResultRepository @Inject()(system: ActorSystem,
reactiveMongoApi: ReactiveMongoApi,
checklistResultVersioningService: ChecklistResultVersioningService)
...
override def count(): Future[Int] = collection(ResultsCollectionName).count()
...
private def collection(name: String): JSONCollection =
reactiveMongoApi.db.collection[JSONCollection](name)
}
И внутри теста, который должен проверить count
метод, мы пытаемся издеваться над collection
объект, который мы получаем от драйвера и в конечном итоге заглушаем его методом count:
doReturn(Future.successful(1)).when(jsonCollection).count()
Все выглядит правильно, но при исполнении, collection(ResultsCollectionName).count()
всегда возвращает нуль (в простых словах заглушка не работает.
если мы посмотрим на метод count общей коллекции, мы увидим гораздо более сложную сигнатуру:
def count[H](selector: Option[pack.Document] = None, limit: Int = 0, skip: Int = 0, hint: Option[H] = None)(implicit h: H => CountCommand.Hint, ec: ExecutionContext): Future[Int]
И я верю, что это точная причина, почему заглушка не работает.
Мы также попытались сделать это:
doReturn(Future.successful(1)).when(jsonCollection).count[MockCommand](None, 0, 0, None)
Также не помогло. Как создать надежную заглушку для таких методов?
Спасибо,