我正在开发一个 R 包,我需要一些帮助来编写 R 测试函数,这些函数旨在检查是否在 C 端代码上抛出了正确的警告,然后在 R 端捕获。让我给你一些关于我正在做什么的背景:
- 我写的大部分内容都是在 C 端完成的。此外,我在 C 中有一个 if 语句类型的宏,它允许编码器以字符串的形式将警告传递给 R。基本前提是 if(statement_true) pass_warning_to_R("Warning string to pass")。我想做的是通过编写一个使用 tryCatch 块的 R 文件来测试这些警告是否在我期望/需要它们时被抛出。
到目前为止,我已经写了类似的东西:
counter <- 0 tryCatch({ function_im_testing() }, warning = function(war) { # Check if warning is as expected and if so increment counter if(toString(war)=="The warning I'm expecting/testing for"){ print(toString(war)) counter <- counter + 1 } }, error = function(err) { print(toString(err)) }, finally = { print("Leaving tryCatch") }) # Stop if the 3 warnings we expected aren't present stopifnot(counter == 3)
这是我正在使用的方法,到目前为止,我什至无法通过尝试使 toString(war) 和“我期待/测试的警告”相同来执行 if 语句事物。再加上这种方法非常草率且不可靠,这让我相信有更好的方法。那么,有没有更好的方法来做到这一点?