Playspec Mock актер для юнит-теста - PullRequest
0 голосов
/ 07 мая 2018

Привет, я пытаюсь проверить эту функциональность в контроллере, мне нужно смоделировать «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 голосов
/ 21 мая 2018

Я думаю, что вы хотите сделать, это смоделировать субъект shard, иначе вам придется фактически запускать кластер и шардинг при выполнении модульного теста.

Самый простой способ - это либо сделать MyShardProvider.shard что-то, что вы вводите, либо можете переопределить (в зависимости от того, как вы делаете инъекцию в вашем игровом приложении) в тестовом примере, чтобы вместо этого предоставить ActorRef для TestProbe.

То, что у вас есть MyShardProvider.shard, выглядит немного подозрительно, однако, вы никогда не должны иметь синглтон, который содержит систему актеров, вместо этого вы должны вводить экземпляры, как показано в документах Play здесь: https://www.playframework.com/documentation/2.6.x/ScalaAkka

...