如何单元测试调用退出?

问题描述 投票:0回答:1

我有一个在某些非常特殊的场景中使用

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 不会结束会话以便继续其他测试。

r testthat
1个回答
0
投票

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
© www.soinside.com 2019 - 2024. All rights reserved.