主要区别在于它们应该用在哪里。
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") }
)
运行这段代码没有产出,期望的行为。
现在,如果我们发表意见stopifnot在mydiv这样的:
mydiv <- function(a,b) {
#stopifnot(abs(b)>0)
a/b
}
并再次测试tryCatch
块,我们得到如下的输出:
[1] "Warning, mydiv accept to divide by 0"
这是测试功能的一个小例子如预期的那样真的抛出错误。
tryCatch块只是展示一个不同的消息,我希望这给这个主题更多的灯光。
我不认为'assertError()'做你认为它可能。它被设计用于分析代码以找到预期的错误而不是进行计算,并且如果它找不到解析错误只会引发实际的错误 – Henry
因此,当存在解析错误或警告时,这些函数会产生错误?这对我来说听起来像一个奇怪的概念(我与C的assert()一起长大)。 –
否。如果没有解析错误,'assertError()'会引发错误。这是一个断言,有一个错误 – Henry