Я новичок в Akka и Scala, и я родом из несовместимого мира. Вероятно, я делаю много чего не так, я буду признателен за отзывы, даже если это не связано с вопросом.Akka Единичное тестирование для манекенов
Я занимаюсь простым чатом с Аккой и Скалой. Я начал (бизнес-требования bc) с помощью «ввода функции» ... это типичная функция whatsapp или tellegram «Джон печатает сообщение».
Я смоделировал его, используя два типа актеров: Talkers and 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 и Акку я испытал это, как:
- Я получаю мой разговор актер
- Я издеваться болтунов
- Я отправить сообщение 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 mocks? Правильно ли этот подход?
Правильно ли вводить список разговоров в мой разговор? Актер?
Я искал документацию, но я думаю, что слишком много старых, и я не уверен, что примеры кода по-прежнему функциональны.
Благодарим Вас за время, ребята, и жаль об этом нуб вопрос: =)
Привет Jazmit, спасибо за Ваш ответ. Конечно, я знаю, что мой тест глупый. И, конечно же, я сделаю некоторые интеграционные тесты, но я начинаю с простых вещей: P Итак, на ваш взгляд, для выполнения этого фиктивного теста я должен высмеивать своих болтунов, должен ли я использовать насмешливую структуру? Вы мне порекомендовали? Есть ли способ сделать это с Teskit напрямую? Еще раз спасибо за ваше время :) – SergiGP
Я бы рекомендовал использовать ScalaMock, добавил ссылку на ответ. TestKit предназначен для асинхронных тестов, вам это не понадобится для простых тестов синхронизации. – jazmit
Возможно, вам повезло, если вы издеваетесь над актером Refs, используя TestProbe, но рано или поздно вам понадобится фальшивая каркас для других зависимостей – jazmit