如何在Akka Actor中模拟HTTP服务

芬莱·韦伯

我有一个actor(实际上是一个持久性actor),响应消息(命令),需要进行HTTP调用。现在的问题是,如何在单元测试中处理此HTTP调用?

通常,我会在测试时结合使用DI和模拟来注入HTTP服务的模拟实现。但是我不确定这是如何解决Akka问题吗?即使这是Akka中的解决方法,我也不确定如何在测试中进行注入和模拟。

有什么想法吗?测试执行IO操作(HTTP调用,写入DB等)的Actor的惯用方式是什么?

PS:我使用的是Akka Typed。

杰夫·刘易斯

我个人认为,应尽可能避免在Actors中进行IO操作(有关更多详细信息,请参见此演示文稿)。

话虽这么说,我敢肯定有些人会不同意,您可能不应该听我的话:)

这是我将如何对其进行模拟以进行测试的方法。

  1. 创建一个代表您的http调用的特征。

    特质客户端{def makeHttpCall(input:Int):Future [Output]}

(您将需要创建一个实现此特征的类,并与演员分开对其进行测试。)

  1. 使用其特质的实例的构造函数/应用方法将其传递给您的演员。

    def apply(client:Client):Behavior [...] = {//在行为中使用客户端}

  2. 在您的测试中,创建一个Client的模拟实例,并将其传递给您的actor。您可以使用模拟库(ScalaMock或Mockito)模拟客户端,或者实际上可以相对轻松地创建特征的测试实现:

    类TestClient扩展客户端{def makeHttpCall(input:Int):Future [Output] = Future.successful(Output(...))}

注意:我选择的所有类和方法的名称都只是占位符。当然,您应该根据工作环境选择更具体的名称。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章