R 包中已弃用函数的单元测试会在检查期间导致警告
Unit tests for deprecated functions in R package cause warnings during check
我通过在函数开头包含 .Deprecated("new_function_name")
行来弃用我的 R 包中的几个函数。我对那些已弃用的功能进行了完整的单元测试。现在这些测试会产生警告(由于弃用消息)并混淆 testthat::test()
和 devtools::check().
的结果
我可以删除已弃用函数的测试覆盖率,但似乎只要用户仍然可以调用这些函数,我就应该保留测试覆盖率。有没有一种方法可以保留测试但避免 check()
结果混乱?例如,如果 expect_equal()
仍然有效,则告诉 testthat
将它们计为通过,忽略弃用警告?
.Deprecated
产生警告。所以你总是可以临时存储输出并将其包装在对 expect_warning
或 suppressWarnings
的调用中,如果你不关心测试它是否发出警告。
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))
>
我通过在函数开头包含 .Deprecated("new_function_name")
行来弃用我的 R 包中的几个函数。我对那些已弃用的功能进行了完整的单元测试。现在这些测试会产生警告(由于弃用消息)并混淆 testthat::test()
和 devtools::check().
我可以删除已弃用函数的测试覆盖率,但似乎只要用户仍然可以调用这些函数,我就应该保留测试覆盖率。有没有一种方法可以保留测试但避免 check()
结果混乱?例如,如果 expect_equal()
仍然有效,则告诉 testthat
将它们计为通过,忽略弃用警告?
.Deprecated
产生警告。所以你总是可以临时存储输出并将其包装在对 expect_warning
或 suppressWarnings
的调用中,如果你不关心测试它是否发出警告。
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))
>