Несколько групп в моем отделе начали использовать Spray для разработки веб-сервисов на основе REST, и все они столкнулись с похожей проблемой, и до сих пор не было хороших решений.
Предположим, у вас было следующее:
FooService extends Actor { ??? }
а потом в другом месте:
path("SomePath") {
id =>
get {
requestContext =>
// I apologize for the janky Props usage here, just an example
val fooService = actorRefFactory.actorOf(Props(new FooService(requestContext)))
queryService ! SomeMessage(id)
}
}
Другими словами, у каждой конечной точки есть соответствующий актор, и внутри маршрута актор этого типа будет запущен с контекстом запроса, ему будет передано сообщение, и этот актор обработает HttpResponse & stop.
У меня всегда были достаточно простые деревья маршрутов, которые я тестировал только самих Актеров и позволял тестированию маршрутов обрабатываться интеграционными тестами, но здесь меня отклонили. Итак, проблема в том, что для модульных тестов люди хотят иметь возможность заменить FooService на MockFooService.
Есть ли стандартный способ справиться с этой ситуацией?