testthat:一次期望错误和变量值?
testthat: Expect error and variable value at once?
我想测试一个可以抛出错误的函数,但我也想确保变量值是正确的(以验证错误发生前的预期最后状态 - 所以我想测试不需要的副作用)。可以这样做吗?
要测试的简化表达式
x <- 1 # could also be made "global" by "<<-"
stop("damn, an error occured")
我该如何做
testthat("double check",
expect_error_and_TRUE( x == 1, {
x <- 1
stop("damn, an error occured")
}))
我找不到 "stack"(管道)expect
函数的方法?
如果 函数 returns 一个值,它不会抛出错误,否则会舍入。如果愿意,您可以在 expect_error 中测试特定字符串,这样您就可以在错误中设置 x.
的值
{
x <- 1
stop("damn, an error occured")
}
## Error: damn, an error occured
x
## [1] 1
rm(x)
f <- function(){
x <- 1
stop("damn, an error occured")
}
f() == 1
## Error in f() : damn, an error occured
expect_error(f(), "damn, an error occured")
f <- function(){
x <- 1
stop("damn, an error occured, x is ", x)
}
expect_error(f(), "x is 1")
我建议不要在函数外测试代码,因为它取决于环境,它在哪里 运行,所以如果你 运行 它在测试文件中它可能不一样如代码的 "main" 部分
这里有一个更好的例子来测试不需要的副作用 - 以及一个简单的解决方案:
library(testthat)
counter <- 1
test_that("error occurs but does not change the previous value", {
expect_error(if (log("a") == 42) counter <- counter + 1)
expect_equal(counter, 1)
})
我想测试一个可以抛出错误的函数,但我也想确保变量值是正确的(以验证错误发生前的预期最后状态 - 所以我想测试不需要的副作用)。可以这样做吗?
要测试的简化表达式
x <- 1 # could also be made "global" by "<<-"
stop("damn, an error occured")
我该如何做
testthat("double check",
expect_error_and_TRUE( x == 1, {
x <- 1
stop("damn, an error occured")
}))
我找不到 "stack"(管道)expect
函数的方法?
如果 函数 returns 一个值,它不会抛出错误,否则会舍入。如果愿意,您可以在 expect_error 中测试特定字符串,这样您就可以在错误中设置 x.
的值{
x <- 1
stop("damn, an error occured")
}
## Error: damn, an error occured
x
## [1] 1
rm(x)
f <- function(){
x <- 1
stop("damn, an error occured")
}
f() == 1
## Error in f() : damn, an error occured
expect_error(f(), "damn, an error occured")
f <- function(){
x <- 1
stop("damn, an error occured, x is ", x)
}
expect_error(f(), "x is 1")
我建议不要在函数外测试代码,因为它取决于环境,它在哪里 运行,所以如果你 运行 它在测试文件中它可能不一样如代码的 "main" 部分
这里有一个更好的例子来测试不需要的副作用 - 以及一个简单的解决方案:
library(testthat)
counter <- 1
test_that("error occurs but does not change the previous value", {
expect_error(if (log("a") == 42) counter <- counter + 1)
expect_equal(counter, 1)
})