2017-03-22 16 views
1

我已經棄用了R包中的幾個函數,在函數的開頭加入了.Deprecated("new_function_name")行。對於那些被棄用的函數,我有完整的單元測試覆蓋率。現在這些測試會產生警告(因爲棄用信息),並渾濁的結果testthat::test()devtools::check().對R包中不推薦使用的函數進行單元測試在檢查過程中導致警告

我可以刪除不推薦使用的函數的測試覆蓋率,但似乎只要用戶仍然可以調用函數,我應該保留測試覆蓋率。有沒有辦法保持測試結果,但避免check()的結果混亂?例如,如果expect_equal()仍然有效,請告知testthat將其視爲通過,忽略棄用警告?

回答

1

.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)) 
> 
+0

這滿足保持測試和測試'產生一個乾淨的片材的主要目標()'。我很樂意將這種方法放入一個函數中,這樣我就可以將我的測試從'expect_equal'更改爲'expect_equal_deprecated' - 將更清晰地實現,而不是像這樣更新每個測試。但是我對它進行了修飾,並沒有看到方法,所以也許這是最好的可以完成的。 –

相關問題