Переопределить 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-монитор перед каждым тестом, а затем генерирую сбой, если он был вызван.