0

我在 Future.respond 中运行了一些代码,由于错误,它会引发 NPE。问题是我的单元测试完全错过了它,并且都愉快地通过了,因为 NPE 被 RootMonitor 吞噬了。

所以,我的问题是,是否有任何方法可以覆盖单元测试的 RootMonitor 行为以导致测试失败而不是吞下异常?

我知道,我可以在响应中捕获异常,但这有点倒退——如果我认为可能存在异常,我会首先修复它。这正是我希望我的测试捕捉到的一种情况。

所以,我正在寻找的是一种为测试全局覆盖 RootMonitor 的方法,或者以某种方式断言它在测试完成后没有处理任何异常。有没有办法做这样的事情?人们通常如何处理这种测试?

4

1 回答 1

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 监视器,然后如果它被调用就会产生一个失败。

于 2016-09-06T23:42:36.603 回答