我想知道stopifnot()
和assertError()
之间的差异是什么:
assertError()
(您必须首先加载"工具"包),但stopifnot()
是。
更重要的是,即使我传递TRUE
或FALSE
之类的参数,assertError()也会抛出错误消息,而stopifnot()
会做出显而易见的事情。
阅读手册页没有帮助。正确使用的是什么,而不是assertError(length(x) != 7)
?如果x
未定义,则该语句不会产生错误,但一旦定义,它就会产生错误,与x
的长度无关(7或不是)。
答案 0 :(得分:4)
主要区别在于应该使用它们。
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块只是用不同的消息展示,我希望这能更好地说明这个主题。