R包中已弃用功能的单元测试会在检查期间导致警告

时间:2017-03-22 12:49:17

标签: r deprecation-warning testthat

我已经弃用了我的R包中的几个函数,方法是在函数的开头加一个.Deprecated("new_function_name")行。对于那些已弃用的函数,我有完整的单元测试覆盖率。现在这些测试会产生警告(因为弃用消息)并使testthat::test()devtools::check().的结果变得混乱

我可以删除已弃用函数的测试覆盖率,但似乎只要用户仍然可以调用函数,我应该保留测试覆盖率。有没有办法保持测试,但避免check()的结果混乱?例如,如果testthat仍然有效,请告诉expect_equal()将它们计为通过,忽略弃用警告?

1 个答案:

答案 0 :(得分:4)

.Deprecated会发出警告。因此,如果您不想测试它是否发出警告,您可以随时临时存储输出并将其包装在expect_warningsuppressWarnings的调用中。

my_dep_fun <- function(x){
   .Deprecated("my_new_fun")
   return(x+1)
}

使用此

> # This is what I expect you're doing right now
> expect_equal(my_dep_fun(3), 4)
Warning message:
'my_dep_fun' is deprecated.
Use 'my_new_fun' instead.
See help("Deprecated") 
> 
> # If we store and use expect_warning we don't get the warning
> expect_warning(tmp <- my_dep_fun(3))
> expect_equal(tmp, 4)
> # Alternatively...
> suppressWarnings(expect_equal(my_dep_fun(3), 4))
>