我有一个actor(实际上是一个持久性actor),响应消息(命令),需要进行HTTP调用。现在的问题是,如何在单元测试中处理此HTTP调用?
通常,我会在测试时结合使用DI和模拟来注入HTTP服务的模拟实现。但是我不确定这是如何解决Akka问题吗?即使这是Akka中的解决方法,我也不确定如何在测试中进行注入和模拟。
有什么想法吗?测试执行IO操作(HTTP调用,写入DB等)的Actor的惯用方式是什么?
PS:我使用的是Akka Typed。
我个人认为,应尽可能避免在Actors中进行IO操作(有关更多详细信息,请参见此演示文稿)。
话虽这么说,我敢肯定有些人会不同意,您可能不应该听我的话:)
这是我将如何对其进行模拟以进行测试的方法。
创建一个代表您的http调用的特征。
特质客户端{def makeHttpCall(input:Int):Future [Output]}
(您将需要创建一个实现此特征的类,并与演员分开对其进行测试。)
使用其特质的实例的构造函数/应用方法将其传递给您的演员。
def apply(client:Client):Behavior [...] = {//在行为中使用客户端}
在您的测试中,创建一个Client的模拟实例,并将其传递给您的actor。您可以使用模拟库(ScalaMock或Mockito)模拟客户端,或者实际上可以相对轻松地创建特征的测试实现:
类TestClient扩展客户端{def makeHttpCall(input:Int):Future [Output] = Future.successful(Output(...))}
注意:我选择的所有类和方法的名称都只是占位符。当然,您应该根据工作环境选择更具体的名称。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句