使用test_that的多个期望

时间:2014-04-30 19:42:17

标签: r unit-testing testthat

对于expect_that单元测试,是否有多种方法可以进行预测?例如,对于给定的expect_that()语句,我希望函数f()发出警告并返回数字10

2 个答案:

答案 0 :(得分:2)

test_that("f works as expected", {
expect_warning(f())
expect_equal(f(), 10)
}
)

如果我理解你的背景,这应该有效。测试将失败,并报告是否满足其中一个或两个期望。

要仅运行一次该函数,您可以尝试将该函数包装在test_that:

    test_that("f works as expected", {
a <- tryCatch(f(), warning=function(w) return(list(f(), w)))
expect_equal(a[[2]], "warning text")
expect_equal(a[[1]], 10)
rm(a)
}
)

我还没有对此进行过测试,因此我不确定它是否适用于您的特定情况,但我过去曾使用类似的方法使用test_that。

答案 1 :(得分:1)

context("Checking blah")

test_that("blah works",{
    f <- function(){warning("blah"); return(10)}
    expect_warning(x <- f())
    expect_equal(x, 10)
})

您可以在检查警告时保存输出。之后检查输出是否符合预期。