Я новичок в Akka и Scala, и я из неконкурентного мира. Возможно, я делаю много вещей неправильно, я буду признателен за обратную связь, даже если она не связана с вопросом.
Я делаю простое приложение для чата с Akka и Scala. Я начал (bc бизнес-требования) с «функции ввода» ... это типичная функция в WhatsApp или телеграмме «Джон печатает сообщение».
Я смоделировал его, используя два типа актеров: Talkers и Conversation, и я хочу провести модульное тестирование своего актера Conversation. Мой актер Conversation выглядит так:
object Conversation {
def props(conversationId: UUID, talkers: List[ActorRef])(out: ActorRef) = Props(new Conversation(conversationId, talkers))
case class Typing(talkerId: TalkerId)
}
class Conversation(conversationId: UUID, talkers: List[ActorRef]) extends Actor with ActorLogging {
def receive = LoggingReceive {
case Typing(talkerId) =>
// notify all talkers that a talker is typing
// @TODO don't notify user which is typing
talkers foreach {talker: ActorRef => talker ! InterlocutorTyping(talkerId)}
}
}
Я думаю, сейчас это очень просто. Итак, прежде чем начать программировать на Scala и Akka, я протестировал это так:
- Я получаю своего актера разговора
- я издеваюсь над болтунами
- Я отправляю сообщение Typing моему актеру
- Я ожидаю, что говорящие должны быть уведомлены
Я действительно не знаю, правильный ли это подход в Scala и Akka. Мой тест (с использованием scalatest) выглядит так:
"Conversation" should {
"Notify interlocutors when a talker is typing" in {
val talkerRef1 = system.actorOf(Props())
val talkerRef2 = system.actorOf(Props())
val talkerRef1Id = TalkerIdStub.random
val conversationId = UUID.randomUUID()
val conversationRef = system.actorOf(Props(classOf[Conversation], conversationId, List(talkerRef1, talkerRef2)))
// should I use TestActorRef ?
conversationRef ! InterlocutorTyping(talkerRef1Id)
// assert that talker2 is notified when talker1 is typing
}
}
Должен ли я использовать TestActorRef? Должен ли я использовать TestProbe() (я читал, что это для интеграционных тестов)
Как я могу создавать макеты Talker? Правилен ли этот подход?
Правильно ли вводить список говорящих в мой разговор Актер?
Я искал документацию, но я думаю, что она слишком старая, и я не уверен, что примеры кода все еще работают.
Спасибо за ваше время, ребята, и извините за этот нубский вопрос :=)