tutorial meaning kafka israel ciudad scala akka

scala - meaning - Coincidencia de patrones en el mensaje esperado



akka vs kafka (1)

¿Cómo puedo probar el mensaje esperado con akka testkit si no conozco todos los detalles del mensaje? ¿Puedo usar el subrayado de alguna manera "_"?

Ejemplo que puedo probar:

echoActor ! "hello world" expectMsg("hello world")

Ejemplo que quiero probar

case class EchoWithRandom(msg: String, random: Int) echoWithRandomActor ! "hi again" expectMsg(EchoWithRandom("hi again", _))

La forma en que no quiero usar:

echoWithRandomActor ! "hi again" val msg = receiveOne(1.second) msg match { case EchoWithRandom("hi again", _) => //ok case _ => fail("something wrong") }


No parece que puedas hacer mucho al respecto, porque expectMsg usa == detrás de escena .

Podría intentar usar expectMsgPF , donde PF proviene de PartialFunction :

echoWithRandomActor ! "hi again" expectMsgPF() { case EchoWithRandom("hi again", _) => () }

Actualizar

En las versiones recientes ( 2.5.x en este momento) necesitas un TestProbe .

También puede devolver un objeto desde el expectMsgPF . Podría ser el objeto contra el que está haciendo coincidir el patrón o partes de él. De esta manera, puede inspeccionarlo aún más después de que expectMsgPF devuelva correctamente.

import akka.testkit.TestProbe val probe = TestProbe() echoWithRandomActor ! "hi again" val expectedMessage = testProbe.expectMsgPF() { // pattern matching only case ok@EchoWithRandom("hi again", _) => ok // assertion and pattern matching at the same time case ok@EchoWithRandom("also acceptable", r) if r > 0 => ok } // more assertions and inspections on expectedMessage

Ver Akka Testing para más información.