我想测试一个 Http4sClient
正在从我的类中调用ClassUnderTest
(以发出 HTTP 请求)并且发出的请求包含我期望的标头。
在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
(after .create
) 的实例,现在我需要一个Resource[IO, http4s.Client[IO]]
.
如何使用测试替身来代替Client
/Resource[F, Client[F]]
以便我可以测试它发出的请求?
文档上的测试页面并没有真正帮助我。我想要一个测试替身,而不是测试所有功能Service
(我不想启动服务器)。