Переопределить RootMonitor

У меня есть код, работающий внутри Future.respond, который выбрасывает NPE из-за ошибки. Проблема в том, что мои модульные тесты полностью пропустили его, и все с радостью проходят, потому что RootMonitor проглотил NPE.

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

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

Итак, я ищу способ переопределить RootMonitor глобально для тестов, или как-то утверждать, что он не обрабатывал никаких исключений после завершения теста. Есть ли способ сделать что-то подобное? Как люди обычно имеют дело с такого рода тестами?

1 ответ

Хорошо, я думаю, я нашел решение. Это выглядит немного глупо, поэтому, если кто-то может придумать лучший способ, пожалуйста, вмешайтесь, но здесь идет.

   class MonitoredSuite extends FunSuite {
     protected override def withFixture(test: NoArgTest): Outcome = {
       var exception: Throwable = null
       Monitor.using(Monitor.mk {
         case e =>
         exception = e
         false
       })(test())  match {
         case x@Exceptional(_) => x
         case s if exception == null => s
         case _ => Exceptional(exception)
      }
    }         
   }

По сути, я устанавливаю noop-монитор перед каждым тестом, а затем генерирую сбой, если он был вызван.

Другие вопросы по тегам