0

scala アクターのテストを書き始めました。このブログを読みました。http://blog.matthieuguillermin.fr/2013/06/akka-testing-your-actors/ それから始めました。私はアプリケーションアクターを書きました。しかし、他とは違うアプリケーション アクターがブログにいることに気付きました。役者がメインクラスだから。コンソールに文字列を書き込み、別のアクターにメッセージを送信しました。アプリケーション アクターをテストするにはどうすればよいですか?

    class Application extends Actor{

      val cliCommandExecute = context.actorOf(Props[CLICommandExecute],"CLICommandExecute")
      println(Util.welcomeMessage)
      cliCommandExecute ! CLICommandExecute.Listen(self)

      def receive = {
        case CLICommandExecute.Done(result: String) => {
          println(result)
          cliCommandExecute ! CLICommandExecute.Listen(self)
        }
        case CLICommandExecute.Failed(result: String) => {
          println(result)
          println(Util.failedMessage)
          context.stop(self)
        }
        case CLICommandExecute.Exit => {
          println(Util.exitMessage)
          context.stop(self)
        }
      }
    }

ApplicationTest を書きました。しかし、実行すると、テスト結果が失敗しました。

    class ApplicationTest  extends TestKit(ActorSystem("testSystem"))
      with WordSpecLike
      with Matchers {

        "A application actor" must {
          // Creation of the TestActorRef
          val actorRef = TestActorRef[Application]
          val result = "success"
          "receive messages" in {
            // This call is synchronous. The actor receive() method will be called in the current thread
            actorRef ! CLICommandExecute.Done(result)
            // This method assert that the testActorRef has received a specific message
            expectMsg("success")
          }
        }
    }     

エラーは次のとおりです。

    assertion failed: timeout (3 seconds) during expectMsg while waiting for success
    java.lang.AssertionError: assertion failed: timeout (3 seconds) during expectMsg while waiting for success

どうすれば続行できますか?

4

1 に答える 1