Skip to content

Actor 间的异步依赖如何单元测试 #15

@zhongl

Description

@zhongl

akka 提供了 TestActorRef 帮助我们同步测试 Actor.

def log(m: => String) = println(s"${Thread.currentThread} - $m") 

def logReceived(m: => Any)(implicit self: ActorRef) = log(s"$self received: $m")

class A extends Actor {
  def receive = {
    case x => logReceived(x)
  }
}

class B extends Actor {
  private val a = context.actorOf(Props(new A))

  def receive = {
    case x => logReceived(x); a ! x
  }
}

val a = TestActorRef(new A, "a")

log("Send a message to a")

a ! "message"

val b = TestActorRef(new B, "b")

log("Send a message to b")

b ! "message"

但运行完上面的完整代码, 打印输出结果会告诉你 :

  1. a发消息时, 收到消息的打印是同步执行的
  2. 当向b发消息时, 但a收到消息的打印却是异步的

实际开发中, 总会有如BA的依赖, 那么针对B的单元测试怎么做好呢?

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions