Spray、Akka、Scala测试全演员系统的方法

Spray、Akka、Scala测试全演员系统的方法,scala,integration-testing,spray,scalatest,akka-testkit,Scala,Integration Testing,Spray,Scalatest,Akka Testkit,我有一个应用程序使用喷雾,Akka和Scala。当前的单元测试是通过Scala测试完成的。应用程序使用喷洒路由来确定和解析web请求上的一些基本数据,然后将其传递给参与者以执行所需的操作。对于Spray,我们使用一个自定义初始化类,该类继承自Spray.servlet.Initializer,它配置并启动每个参与者。这些操作的一部分是调用7或8个其他web服务。每个参与者都有一个参与者来处理与各自服务的通信。因此,我们在主参与者中执行一系列逻辑,将通信委托给其他参与者,最后,除了自己的工作之外,

我有一个应用程序使用喷雾,Akka和Scala。当前的单元测试是通过Scala测试完成的。应用程序使用喷洒路由来确定和解析web请求上的一些基本数据,然后将其传递给参与者以执行所需的操作。对于Spray,我们使用一个自定义初始化类,该类继承自Spray.servlet.Initializer,它配置并启动每个参与者。这些操作的一部分是调用7或8个其他web服务。每个参与者都有一个参与者来处理与各自服务的通信。因此,我们在主参与者中执行一系列逻辑,将通信委托给其他参与者,最后,除了自己的工作之外,它还处理所有返回的数据

我想使用Scala test和Akka Testkit对整个系统进行测试,使用Testkit替换通信参与者以返回合适的测试数据

问题分为两部分

  • 什么是更好的测试方法?我可以使用Scala Testkit通过Spray Testkit通过Spray路由服务发出请求。另一种选择是,由于主参与者通过case类获取路由服务结果,因此只需直接将消息传递给跳过路由服务的参与者。两者都有各自的优点。然而,我发现Spray testkit上的文档很少。当spray.servlet.Initializer中的参与者具有初始化逻辑时,如何通过Akka Testkit对参与者进行细分

  • 第二个问题是如何通过Akka Testkit建立一个更复杂的参与者系统。文档中提到这是可能的,但对于如何做到这一点,还远远没有表达出来。我有一个路由服务,它是一个参与者,与另一个参与者(业务逻辑的主体)对话,然后与其他几个参与者对话。参考Akka测试工具包文档,这些通信参与者是否被视为“儿童”参与者?是否有一个项目展示了测试整个丰富的Akka actor系统的最佳实践


在这种情况下,我的直觉是有一套基于Spray Testkit的测试来测试我们的路由系统。然后,进行一组测试,将我们的数据案例类发送给主参与者,后面有模拟的通信参与者,并验证我们从主参与者那里得到了正确的响应

我通常为应用程序的每一层创建测试。另外,在测试当前层时,我会模拟另一层。如果我在测试业务,我会模拟DAO,如果我在测试喷洒路线,我会模拟业务对象(由喷洒路线使用)。 当我与Actor和Spray合作时,我总是尝试在主程序之前创建测试,这有助于我的应用程序架构应该如何。很多时候,我需要重构我的类以使用
依赖注入
,或者不在当前类/特征中设置
val
,这样我就可以模拟
val
s