小编jm0*_*jm0的帖子

没有嘲笑的Akka单元测试策略

主要想法:我们如何进行单元测试(或重新考虑以促进单元测试)Akka演员具有相当复杂的业务逻辑?

我一直在使用Akka为我公司的一个项目(一些非常基本的东西正在制作中)并不断重新考虑我的演员,研究和试验Akka测试工具包,看看我能否做到正确...

基本上,我随便做的大部分阅读都是"男人,你需要的只是测试工具包.如果你使用的是模拟,你做错了!!" 然而,文档和示例是如此轻松,以至于我发现了一些未涵盖的问题(基本上他们的示例是非常有用的类,它们有1个方法并且不与其他actor交互,或者只是以简单的方式,比如方法结束时的输入输出).顺便说一句,如果任何人都可以指向一个具有任何合理复杂程度的akka​​应用程序的测试套件,我真的很感激.

在这里,我现在至少会尝试详细说明一些特定情况,并想知道一个人称之为"Akka认证"的方法(但请不要含糊其辞......我正在寻找Roland Kuhn风格的方法,如果他是实际上深入研究具体问题).我将接受涉及重构的策略,但请注意我在场景中提到的对此的焦虑.

场景1:横向方法(在同一个角色中调用另一个方法的方法)

case class GetProductById(id : Int)
case class GetActiveProductsByIds(ids : List[Int])

class ProductActor(val partsActor : ActorRef, inventoryActor : ActorRef) extends Actor {
  override def receive: Receive = {
    case GetProductById(pId) => pipe(getProductById(pId)) to sender
    case GetActiveProductsByIds(pIds) => pipe(getActiveProductsByIds(pIds)) to sender
  }

  def getProductById(id : Int) : Future[Product] = {
    for {
      // Using pseudo-code here
      parts <- (partsActor ? GetPartsForProduct(id)).mapTo[List[Part]]
      instock <- (inventoryActor ? StockStatusRequest(id)).mapTo[Boolean]
      product <- Product(parts, instock)
    } yield product
  } …
Run Code Online (Sandbox Code Playgroud)

unit-testing scala akka akka-testkit

7
推荐指数
1
解决办法
502
查看次数

标签 统计

akka ×1

akka-testkit ×1

scala ×1

unit-testing ×1