我想知道 stopifnot()
之间有什么区别和 assertError()
是:assertError()
默认情况下未找到(您必须先加载“工具”包),但是 stopifnot()
是。
更重要的是,assertError() 总是抛出错误消息,即使我传递了像 TRUE
这样的参数。或 FALSE
, 而 stopifnot()
做明显和预期的事情。
阅读手册页没有帮助。代替 assertError(length(x) != 7)
的正确用法是什么? ?如 x
未定义,语句不会产生错误,但是一旦定义,就会产生错误,与 x
的长度无关(7 与否)。
最佳答案
主要区别在于应该在哪里使用它们。stopIfnot
如果在运行期间不满足某些条件,则旨在停止执行,其中 assertError
旨在测试您的代码。assertError
期望它的参数引发错误,这就是 x
时发生的情况未定义,有错误
> length(x) != 7
Error: object 'x' not found
当您将此表达式传递给
assertError
时,它引发一个错误并且 assertError 返回满足的条件(错误本身)。这允许您测试代码的失败案例。所以
assertError
主要用于测试驱动开发模式 (TDD) 中的测试用例,当您的代码/函数应该为某些特定参数引发错误并确保稍后更新函数时不会破坏它。stopifnot
的示例用法和 assertError
:mydiv <- function(a,b) {
stopifnot(b>0)
a/b
}
现在让我们做一个测试,以确保如果我们将“b”传递为 0,这会引发错误:
tryCatch(
assertError(mydiv(3,0)),
error = function(e) { print("Warning, mydiv accept to divide by 0") }
)
运行此代码不会产生任何输出,而是所需的行为。
现在,如果我们像这样评论 mydiv 中的 stopifnot:
mydiv <- function(a,b) {
#stopifnot(abs(b)>0)
a/b
}
并再次测试
tryCatch
块,我们得到这个输出:[1] "Warning, mydiv accept to divide by 0"
这是一个测试函数是否真的按预期抛出错误的小例子。
tryCatch 块只是为了展示不同的消息,我希望这能让更多人了解这个主题。
关于r - stopifnot() 与 assertError(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38606429/