我的一项测试涉及可能产生特定警告的代码。如果出现此警告,我想忽略它。但是,如果有任何其他警告,我想将其视为错误。使用testthat
实现此目的的最简单方法是什么?
应用程序将是随机测试或其他情况,其中很难事先确定函数的输入是否会引发警告。
玩具示例:
library(testthat)
for (i in 0:100) {
a <- sample(100, 1) - 5
result <- (a + 0):(a + 10) / (a + 10):(a + 0)
result2 <- (log(min(result)))
}
当然,在这个玩具示例中,很容易检查result < 0
。
答案 0 :(得分:0)
以下作品受到testthat::expect_warning
的启发:使用testthat::capture_warning
并分析警告:
library(testthat)
for (i in 0:100) {
a <- sample(100, 1) - 5
result <- (a + 0):(a + 10) / (a + 10):(a + 0)
w <- capture_warnings(result2 <- (log(min(result))))
if (length(w) > 0) {
expect_match(w, regexp = "^$|.*NaNs produced.*")
}
print(result2)
}