0

私は Akka 2.4.2 と TestKit および Scaltest を使用して、アクターの作成とテストを行っています。アクターによってカプセル化された可変状態を調べていると、常に競合状態が発生しているようです。リモート データベースに状態を保存する非常に単純なアクターがあります。

class MyActor(dao: MyDao) extends Actor {
  var state: String = ""
  def receive = {
    case Set(str) => 
      state = str
      dao.save(state)
  }
}

DAO メソッドの型は signaturedao.save(s:String): Future[String]です。データベースへの呼び出しは非同期であり、設定後に行わstate = strれるため、この文字列の割り当てをブロックしているようには見えません。アクターには単体テストが伴います。

it should "set mutable state" in {
  val ref = TestActorRef(new MyActor(new MockDao))
  ref ! Set("foo")
  ref.underlyingActor.state shouldBe "foo"
}

このテストを個別に実行すると、確実に合格します。ただし、すべてのアクター テストを実行すると (12 種類のアクターがいます)、このテスト ケースは非決定論的に合格/不合格になります。そのため、ある種のレースが発生しているようです。デフォルトの Akka 構成を使用しています。何がうまくいかないのか、Akka コミュニティから何か考えはありますか?

4

0 に答える 0