在Kotlin中禁止DeprecationLevel.ERROR

时间:2019-05-12 18:14:57

标签: kotlin

我在自己的API中使用DeprecationLevel.ERROR

@Deprecated(
    message = "moved to def()",
    replaceWith = ReplaceWith(expression = "def()"),
    level = DeprecationLevel.ERROR)
fun abc() = def()

我想要测试以确保呼叫者看到此替换。例如,如果不小心删除了abc()方法,我的测试应该无法编译。

但是我找不到方法进行编译:

@Test
@Suppress("something")
fun deprecatedAbc() {
  abc()
}

例如,@Suppress("DEPRECATION")不起作用。有事吗?

2 个答案:

答案 0 :(得分:1)

根据@Deprecated的{​​{3}}:

  

为帮助逐步删除已弃用的API,可以使用属性级别。通常,逐步淘汰过程包括“警告”,“错误”,“隐藏”或“删除”阶段:

     
      
  • 首先,默认情况下,DeprecationLevel.WARNING用于通知API使用方,但不中断其编译或运行时使用情况。
  •   
  • 然后,过一会儿,弃用级别将提高到DeprecationLevel.ERROR,因此无法使用弃用的API来编译新的Kotlin代码。
  •   

代码并非按设计编译,并且@Suppress仅禁止显示警告,而不显示错误(请参见documentation)。

因此,您无法实现的目标。另外,在我看来,似乎您正在测试Kotlin功能,而不是业务逻辑。您可以改为尝试测试替代产品的行为

答案 1 :(得分:0)

根据DefaultErrorMessages,您可以使用@Suppress("DEPRECATION_ERROR")