测试已弃用的 Scala 函数时如何抑制弃用警告?

How to suppress deprecation warnings when testing deprecated Scala functions?

假设我有一个库,其中包含一个已弃用的函数和一个首选函数:

object MyLib {
  def preferredFunction() = ()
  @deprecated("Use preferredFunction instead", "1.0") def deprecatedFunction() = ()
}

我想在 ScalaTest 中测试 preferredFunctiondeprecatedFunction

class MyLibSpec extends FreeSpec with Matchers {
  "preferred function" in {
    MyLib.preferredFunction() should be(())
  }
  "deprecated function" in {
    MyLib.deprecatedFunction() should be(())
  }
}

但是,在 MyLib.deprecatedFunction() 处报告了弃用警告。

如何避免警告?

Scala 不支持,请参阅 https://groups.google.com/forum/#!topic/scala-internals/LsycMcEkXiA

但是提到了一个插件:

https://github.com/ghik/silencer

我没用过 - 所以我不确定这是否适合你的情况。

只需弃用 class,它由测试装置以反射方式实例化。

scala> @deprecated("","") def f() = ()
f: ()Unit

scala> @deprecated("","") class C { f() }
defined class C

scala> f()
<console>:13: warning: method f is deprecated:
       f()
       ^

Scala 2.13.2 和 2.12.13 添加了对本地抑制编译器警告的支持。

https://www.scala-lang.org/2021/01/12/configuring-and-suppressing-warnings.html

现在你可以@nowarn("cat=deprecation")