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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions