Rol*_*ler 10 unit-testing r assertions
是否建议使用RUnit的check*函数来创建前置条件/后置条件语句,或者在性能或其他方面有一些问题吗?
Cra*_*idt 21
我总是用stopifnot()断言.
我知道这是一篇旧文章,但也许这个答案对于其他以运算符形式寻找 R 断言的人有用。如果您想将一个断言附加到一个麻烦的语句的末尾,这可能是朝着正确方向迈出的一步。
"%assert%" <- function(e1, e2)
{
args <- as.list(match.call()[-1])
defs <- as.list(args$e1)
preds <- as.list(args$e2)[-1L]
for(var in names(defs)[names(defs) != ""]) assign(var, eval(defs[[var]]))
for(p in unlist(preds)) eval(
parse(
text = paste0("if(!", deparse(p), ") stop('assertion ",deparse(p) , " is not true')")
)
)
return(eval(args$e1))
}
Run Code Online (Sandbox Code Playgroud)
示例:如果您正在计算向量 x 的平均值,并且想要确保每个元素都在 1 到 10 之间,您可以使用
mean(x = sample(1:10, size = 100, replace = T)) %assert% c(min(x) > 0 && max(x) < 11)
#5.62
Run Code Online (Sandbox Code Playgroud)
如果此条件不成立,您将收到一个信息错误,例如
mean(x = sample(11:20, size = 100, replace = T)) %assert% c(min(x) > 0, max(x) < 11)
#Error in eval(expr, envir, enclos) : assertion max(x) < 11 is not true
Run Code Online (Sandbox Code Playgroud)
它完全未经测试,因此使用后果自负!
| 归档时间: |
|
| 查看次数: |
1674 次 |
| 最近记录: |