r - stopifnot() 与 assertError()

标签 r assertions

我想知道 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/

相关文章:

javascript - 诸如 Chai 之类的断言库如何在不强制调用函数的情况下工作?

unit-testing - Erlang - Eunit 设置函数不运行

r - 每月返回和不等月长度

r - 使用 R data.table 计算所有变量组合和 df 的不同计数

c# - 什么检查 CollectionAssert.AreEquivalent

Protractor - toBe(truth) 和 toBeTruthy() 之间的区别

python - 获取 openCV 错误 : Assertion Failed

r - 用前一行值填充数据框

R TM 包。在哪里可以找到 TermDocumentMatrix 组件的详细说明?我、j、v

r - 使用 dplyr 拟合多个回归模型