Спрей, Акка, Скала подход к тестированию полной актерской системы
У меня есть приложение, использующее Spray, Akka и Scala. Текущее модульное тестирование выполняется с помощью Scala Test. Приложение использует маршрутизацию Spray для определения и анализа некоторых элементарных данных по веб-запросам, а затем передает их субъекту для выполнения необходимых действий. Для Spray мы используем пользовательский класс инициализации, который наследуется от spray.servlet.Initializer, который настраивает и запускает каждого из участников. Частью этих действий является обращение к 7 или 8 другим веб-сервисам. У каждого есть актер для обработки сообщений с соответствующими службами. Итак, мы выполняем кучу логики в главном действующем субъекте, который делегирует связь другим субъектам, и в конце он обрабатывает все возвращенные данные в дополнение к своей собственной работе.
Я хотел бы протестировать систему в целом, используя Scala Test и Akka Testkit, используя Testkit, чтобы заменить участников коммуникации для возврата подходящих тестовых данных.
Вопрос состоит из двух частей.
Каков лучший подход к тестированию? Я мог бы использовать Scala Testkit для отправки запросов через службу маршрутизации Spray через Spray Testkit. Альтернатива заключается в том, что, поскольку главный субъект принимает результаты службы маршрутизации через класс case, он должен просто напрямую передать сообщение этому субъекту, пропустив службу маршрутизации. У обоих есть свои достоинства. Однако, я нахожу скудную документацию по тест-китам Spray. Как можно подписать актеров с помощью Akka Testkit, если для этих акторов есть логика инициализации в spray.servlet.Initializer?
Второй - как настроить более сложную систему актеров с помощью Akka Testkit. В документации упоминается, что это возможно, но далеко не ясно, как именно это можно сделать. У меня есть служба маршрутизации, которая является актером, который общается с другим актором, который является основной частью бизнес-логики, но затем общается с несколькими другими субъектами. Считаются ли эти актеры коммуникации актерами "Ребенка" со ссылкой на документацию Akka Testkit? Есть ли проект, который демонстрирует лучшие практики в тестировании богатой актерской системы Akka в целом?
Мои инстинкты в этом случае должны иметь набор тестов Spray Testkit для тестирования нашей системы маршрутизации. Затем проведите набор тестов, которые отправят наш класс данных в мастер-актер с поддельными комм-актерами за ним и убедитесь, что мы получили правильный ответ от главного актера.
1 ответ
Я обычно создаю тесты для каждого слоя моего приложения. Кроме того, я высмеиваю другой слой, когда тестирую текущий слой. Если я тестирую бизнес, я бы издевался над DAO, если я тестировал маршруты опрыскивания, я дразнил бизнес-объект (который используется моими маршрутами опрыскивания). Я всегда стараюсь создавать тесты перед основной программой, когда я работаю с Actors and Spray, это помогает понять, как должна быть моя архитектура приложения. Много раз мне нужно реорганизовать мой класс, чтобы использовать dependency injection
или не устанавливайте val
в текущем классе / черта, так что я могу издеваться val
s.