Playspec模拟演员进行单元测试

时间:2018-05-07 14:43:08

标签: scala unit-testing playframework akka actor

您好我正在尝试在控制器中测试此功能,我需要模拟“MyActor”进行单元测试。

def populateArraylist[T](hashSet: HashSet[T]): util.ArrayList[T] = {
 val list = new util.ArrayList[T]()
 hashSet.foreach(x => list.add(x))
list
}


@ApiOperation("Get the state of a something”)
def get(ID: String, dateID: String): Action[AnyContent] = Action.async 
{
implicit request =>

(MyShardProvider.shard ? MyActor.EntityPayload(
  Id,
  MySecondActor.GetStateRequest(dateId)))
  .mapTo[GetStateResponse]
  .map(x => {
    Ok(new String(JacksonSerializer.toBytes(new GetResponse(
      x.state.identifier,
      populateArraylist(x.data.transactionList.processedKeys)
    ))))
  })

}

1 个答案:

答案 0 :(得分:0)

我认为你想要做的是模仿shard actor,否则你必须在单元测试执行时实际运行集群和分片。

最简单的方法可能是在测试用例中使MyShardProvider.shard注入或覆盖的内容(取决于您在播放应用中如何进行注入)以提供ActorRef的{ {1}}而不是。

你有TestProbe看起来有点可疑,你应该永远不会有一个包含演员系统的单例,而应该注入实例,如播放文档中所示:https://www.playframework.com/documentation/2.6.x/ScalaAkka < / p>