Я хотел бы проверить, что Http4s Client
вызывается из моего класса ClassUnderTest
(для выполнения HTTP-запроса) и что этот запрос содержит ожидаемые мной заголовки.
In 0.18.x , я сделал что-то вроде ниже. Использование побочного эффекта для хранения значения заголовков, чтобы я мог сделать утверждение после вызова. В приведенном ниже примере ожидается, что f.execute(...)
создаст PUT
с экземпляром client
, и я пытаюсь записать всю обработку запросов и сохранение заголовков.
"Request has headers" >> {
var headers = List[String]()
val client = Client[IO](new Kleisli[IO, Request[IO], DisposableResponse[IO]](request => {
headers = request.headers.map(_.name.toString()).toList
Ok().map(DisposableResponse(_, IO.pure(())))
}), IO.pure(()))
val f = ClassUnderTest(client)
f.execute("example")
headers must_== List(
"Content-Type",
"X-Forwarded-For",
"Content-Length"
)
}
Настоящий код здесь , если вам интересно.
ClassUnderTest
взял Client[IO]
, чтобы я мог заставить работать выше.
class ClassUnderTest(client: http4s.Client[IO])
В Http4s 0,20.12 , мне пришлось изменить подпись на:
class ClassUnderTest(client: Resource[IO, http4s.Client[IO]])
... и теперь я не могу понять, как заглушить клиента для тестирования. Я экспериментировал с JavaNetClientBuilder
, но это не помогло, потому что я могу получить экземпляр Client
(после .create
), и теперь мне нужно Resource[IO, http4s.Client[IO]]
.
Как я могу использоватьдвойной тест для замены Client
/ Resource[F, Client[F]]
, чтобы я мог протестировать запросы, которые он делает?
Тестовая страница на документах не оченьПомоги мне. Я хочу выполнить двойной тест, чтобы не проверять все функции Service
(я не хочу запускать сервер).