Не удается заглушить несколько сложных вызовов методов с помощью 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)

Также не помогло. Как создать надежную заглушку для таких методов?

Спасибо,

0 ответов

Другие вопросы по тегам