2016-04-12 3 views
1

У меня есть приложение, использующее Spray, Akka и Scala. Текущее тестирование устройства выполняется с помощью Scala Test. Приложение использует маршрутизацию Spray для определения и анализа некоторых рудиментарных данных в веб-запросах, а затем передает их актеру для выполнения необходимых действий. Для Spray мы используем пользовательский класс инициализации, который наследуется от spray.servlet.Initializer, который настраивает и запускает каждого из участников. Часть этих действий состоит в том, чтобы обратиться к некоторым 7 или 8 другим веб-службам. У каждого есть актер для обработки сообщений с их соответствующими услугами. Итак, мы делаем кучу логики в главном актере, который делегирует сообщение другим субъектам, и в конце он обрабатывает все возвращенные данные в дополнение к своей собственной работе на этом пути.Spray, Akka, Scala подход к тестированию системы полного действия

Я хотел бы протестировать систему в целом с помощью Scala Test и Akka Testkit с помощью Testkit, чтобы заменить участников связи, чтобы вернуть соответствующие тестовые данные.

Вопрос - две части.

  • Каков лучший подход к тестированию? Я мог бы использовать Scala Testkit для выполнения запросов через службу маршрутизации Spray через Spray Testkit. Альтернативой является то, что главный актер принимает результаты службы маршрутизации через класс case, просто для того, чтобы напрямую передать сообщение этому игроку, пропустив службу маршрутизации. Оба имеют свои достоинства. Тем не менее, я нахожу документацию скудной на тест-тест Spray. Как можно подставить актеров через Akka Testkit, когда есть логика инициализации для этих актеров в аэрозоле.Сервелет. Инициализатор?

  • Во-вторых, как создать более сложную актерскую систему через Akka Testkit. В документации упоминается, что это возможно, но далеко не выразительно, как именно это можно сделать. У меня есть служба маршрутизации, которая является актером, который разговаривает с другим актером, который является основной частью бизнес-логики, но затем разговаривает с несколькими другими актерами. Являются ли эти субъекты связи рассмотренными участниками «ребенка» в отношении документации «Акка-тесткит»? Есть ли проект, демонстрирующий лучшие практики тестирования богатой актерской системы Akka в целом?

Мои инстинкты в этом случае должны иметь набор тестов на основе Spray Testkit для тестирования нашей системы маршрутизации. Затем приготовьтесь к набору тестов, которые отправляют наш класс case данных мастер-актеру с имитируемыми комм-актерами за ним и подтверждают, что мы получаем правильный ответ от главного актера.

ответ

1

Обычно я создаю тесты для каждого уровня моего приложения. Кроме того, я издеваюсь над другим слоем, когда я тестирую текущий слой. Если я тестирую бизнес, я бы издевался над DAO, если я тестирую маршруты распыления, я издеваюсь над бизнес-объектом (который используется моими маршрутами распыления). Я всегда пытаюсь начать создавать тесты перед основной программой, когда я работаю с Actors and Spray, это помогает в том, как должна быть моя архитектура приложения. Много раз мне нужно реорганизовать мой класс для использования dependency injection или не устанавливать val в текущем классе/признаке, поэтому я могу высмеять val с.