Scala 将一个Http4s 0.20.x客户端存根用于测试

Scala 将一个Http4s 0.20.x客户端存根用于测试,scala,scala-cats,http4s,Scala,Scala Cats,Http4s,我想测试是否正在从我的类ClassUnderTest(发出HTTP请求)调用Http4s客户端,并且发出的请求是否包含我期望的头 在0.18.x中,我做了如下操作。使用一个副作用来存储头的值,这样我就可以在调用后做出断言。在下面的示例中,f.execute(…)需要对client实例执行PUT,我正在尝试记录所有请求处理和存储头 “请求有头”>>{ var headers=List[String]() val client=client[IO](新Kleisli[IO,请求[IO],可处置响应[

我想测试是否正在从我的类
ClassUnderTest
(发出HTTP请求)调用Http4s
客户端
,并且发出的请求是否包含我期望的头

0.18.x中,我做了如下操作。使用一个副作用来存储头的值,这样我就可以在调用后做出断言。在下面的示例中,
f.execute(…)
需要对
client
实例执行
PUT
,我正在尝试记录所有请求处理和存储头

“请求有头”>>{
var headers=List[String]()
val client=client[IO](新Kleisli[IO,请求[IO],可处置响应[IO])(请求=>{
headers=request.headers.map(u.name.toString()).toList
Ok().map(DisposableResponse(_,IO.pure(()))
}),IO.pure(())
val f=被测类别(客户端)
f、 执行(“示例”)
标题必须=列表(
“内容类型”,
“X-Forwarded-For”,
“内容长度”
)
}
真正的代码是如果你感兴趣的话

ClassUnderTest
使用了一个
客户端[IO]
,这样我就可以让上面的工作正常了

ClassUnderTest类(客户端:http4s.client[IO])
在Http4s0.20.12中,我必须将签名更改为:

ClassUnderTest类(客户端:资源[IO,http4s.client[IO])
…现在我不知道如何删除客户端以进行测试。我尝试了
JavaNetClientBuilder
,但这没有帮助,因为我可以得到
客户端的一个实例(在
.create
之后),现在我需要一个
资源[IO,http4s.Client[IO]

如何使用test double代替
客户端
/
资源[F,客户端[F]]
,以便测试它发出的请求?


这些文件上的内容对我没什么帮助。我想要一个双重测试,而不是测试
服务的所有功能(我不想启动服务器)。

我建议您首先看看a是什么。也许你可以从中找出一些东西。你为什么这样说“必须更改签名”?使用
客户机的
资源
意味着您可能会在任何时候创建和销毁
客户机
,这既昂贵又低效。您可以使用
use
来使用资源执行效果,原则上,
use
块可以包含整个程序。请尝试以下答案