【问题标题】:Playspec Mock actor for unit test用于单元测试的 Playspec Mock actor
【发布时间】:2018-10-17 10:02:17
【问题描述】:

您好,我正在尝试在控制器中测试此功能,我需要模拟“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)
    ))))
  })

}

【问题讨论】:

标签: scala unit-testing playframework akka actor


【解决方案1】:

我认为您要做的是模拟 shard 演员,否则您将不得不在单元测试执行时实际运行集群和分片。

最简单的方法可能是在测试用例中创建 MyShardProvider.shard 注入或覆盖(取决于您在 play 应用程序中进行注入的方式)以提供 TestProbeActorRef 代替。

虽然你有 MyShardProvider.shard 看起来有点可疑,但你不应该有一个包含 actor 系统的单例,而是应该注入实例,如 Play 文档中所示:https://www.playframework.com/documentation/2.6.x/ScalaAkka

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-04
    • 2018-03-10
    • 2016-04-10
    • 2018-07-28
    相关资源
    最近更新 更多