Scala测试,如何从参与者那里获取结果

Scala测试,如何从参与者那里获取结果,scala,akka,scalatest,Scala,Akka,Scalatest,我有个问题。我正在做一些scala测试。我的问题是,我不知道如何使用方法的返回来测试它是否向我返回序列。我怎么做? 我的测试班是:(它有效) 返回GamePlayerClient的方法是: private def defineRoles(players: Seq[GamePlayer]): Seq[Player] = { var playersRole: Seq[Player] = Seq() val rand1 = Random.nextInt(players.length)

我有个问题。我正在做一些scala测试。我的问题是,我不知道如何使用方法的返回来测试它是否向我返回序列。我怎么做? 我的测试班是:(它有效)

返回GamePlayerClient的方法是:

private def defineRoles(players: Seq[GamePlayer]): Seq[Player] = {
    var playersRole: Seq[Player] = Seq()
    val rand1 = Random.nextInt(players.length)
    val rand2 = Random.nextInt(players.length)

    for (n <- 0 until players.length) {
      n match {
        case n if n == rand1 || n == rand2 =>
          playersRole = playersRole :+ Impostor(players(n).id, players(n).username, Point2D(0,0))
        case _ => playersRole = playersRole :+ Crewmate(players(n).id, players(n).username, Point2D(0,0))
      }
    }
    playersRole
  }

那么,我怎样才能获取GamePlayerClient(PlayerRole)并搜索里面是否有一系列玩家,其中一个是“船员”。谢谢

您可以使用一个
接收
。。。方法在
TestProbe
上收集发送到探测器的
GamePlayersClient
消息,然后使用ScalaTest的匹配器断言关于这些消息的内容

例如,您可以替换

player1.expectMsgType[GamePlayersClient]

如果感兴趣的领域是
playersRole
,那么您可能有

// To my mind, it's generally OK to do unsafe things like get in a test...
gpcMessageOpt1.get.playersRole shouldNot be(empty)

好的,谢谢!!
player1.expectMsgType[GamePlayersClient]
val gpcMessageOpt1: Option[GamePlayersClient] = Option(player1.receiveN(1)).flatMap {
  case g: GamePlayersClient => Some(g)
  case _ => None
}

gpcMessageOpt1 shouldNot be(empty) // effectively the same as the expectMessage
// To my mind, it's generally OK to do unsafe things like get in a test...
gpcMessageOpt1.get.playersRole shouldNot be(empty)