我有一个在某些非常特殊的场景中使用
quit
的函数,我想为其创建一个单元测试,但是我在 testthat
函数或 try
或 tryCatch
中包装的任何内容都会立即退出 R .
有没有办法为这种情况创建单元测试?
这是该函数的快速可重现示例
mock_quit <- function(n) {
if (n > 1) {
cat("TERMINATING ERROR")
quit(save = "no", status = 1, T)
}
}
测试
"TERMINATING ERROR"
是否被打印或者quit
是否生效就足够了。无论哪种情况,重要的是 R 不会结束会话以便继续其他测试。
看
callr::r
。
mock_quit <- function(n) {
err <- TRUE
try(
{
callr::r(\(x) if (x > 1) quit(save = "no", status = 1, TRUE), args = list(n))
err <- FALSE
}
, silent = TRUE
)
err
}
mock_quit(2)
#> [1] TRUE
mock_quit(0)
#> [1] FALSE