Следите за тем, чтобы любой актер akka перезапустился во время теста - PullRequest
0 голосов
/ 03 декабря 2018

Во многих моих юнит-тестах я создаю актера, который иногда создает других актеров.В тестах, которые проверяют, что система работает должным образом при нормальных обстоятельствах (а не тестах условий отказа), я обычно ожидаю, что ни один из участников не перезапустится.

Есть ли общий способ проверить, что ни один актер не был перезапущен?Я чувствую, что ответ, вероятно, связан с супервизорами, но мне не ясно, как бы я изменил супервизора актера, созданного в не тестовом коде.

Я думаю, что я хочу сказать что-то вроде «смотреть /user актер и всех его потомков и отправить этому актеру сообщение, когда тот актер перезапустится».

Если уместно, я использую akka 2.5 и java 10

1 Ответ

0 голосов
/ 03 декабря 2018

какое значение дает без перезапуска ?разве вы не должны воспользоваться стратегиями надзора и гарантировать, что в условиях временного сбоя в конечном итоге будет выполнено действие, которое вы хотите сделать?

Это фактически известный проект в распределенных системах, который часто называют Ядро ошибки .Это также один из различных шаблонов, о которых говорит Роланд Кун в своей книге Шаблоны реактивного проектирования .

Он состоит из субъекта с состоянием (инкапсулируя то, что может бытьбизнес-логика модуля в вашем приложении), которая требует некоторого побочного эффекта безотказным способом (например, запись в базу данных).Таким образом, для выполнения побочного эффекта он порождает дочернего актера, который будет выполнять действие, не блокируя родителя, и в случае неудачи он может использовать стратегию надзора для повторного запуска и повторной попытки или отказа.Мы часто моделируем этот тип поведения в наших тестах и ​​таким образом можем убедиться, что приложение не просто взорвется, когда БД не отвечает, но и чтобы убедиться, что оно в конечном итоге может связываться с ним.

Это, в конце концов, своего рода субъективная тема, и, конечно, предыдущий пример может быть сколь угодно сложным.Но дело в том, что вы должны были выбрать Akka за его способность помогать вам создавать отказоустойчивые системы.Таким образом, тестирование того, что оно может выжить в условиях кратковременного отказа, даст вам гораздо большую ценность, чем противоположное .

...