В асинхронном (типизированном) тесте актера я должен убедиться, что актер получил конкретное сообщение, прежде чем отправить следующее.Это необходимо, потому что сообщения могут достигать тестируемого субъекта через нескольких дочерних акторов (при прямой отправке сообщения порядок будет гарантирован в любом случае).
Поскольку субъект может изменять только свое внутреннее состояние, а не передавать сигнал извнеМир, в котором сообщение было получено, я должен найти другой способ ждать, пока сообщение не будет обработано.
Есть ли способ подождать, пока все входящие ящики будут пустыми?Я думаю, что ManualTime.timePasses(0.seconds)
может выполнить эту работу, но я не уверен, и это значительно замедляет мои тесты.Очевидно, я не хочу использовать Thread.sleep(...)
, потому что это не гарантирует, что все сообщения будут обработаны, а тесты будут еще медленнее.
Я также пытался использовать BehaviorInterceptor
, чтобы выяснить, когдаГлавный актер получил сообщение, но это возможно только тогда, когда я знаю, какие сообщения дочерние актеры отправляют главному актеру.На самом деле это должно быть прозрачно в тесте, поэтому я ищу общий способ утверждать, что актеры закончили с обработкой сообщений (так как я управляю планировщиком, сообщения таймера не генерируются).