- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想测试我的一个函数是否给出特定消息(或警告或错误)。
good <- function() message("Hello")
bad <- function() message("Hello!!!!!")
我希望第一个期望成功,第二个期望失败。
library(testthat)
expect_message(good(), "Hello", fixed=TRUE)
expect_message(bad(), "Hello", fixed=TRUE)
不幸的是,他们现在都通过了。
澄清一下:这只是一个最小的示例,而不是我正在测试的确切消息。如果可能的话,我希望通过为我要测试的每条新消息提供适当的正则表达式来避免给我的测试脚本增加复杂性(可能还有错误)。
最佳答案
您可以使用 ^
和 $
anchor 来指示字符串必须以您的模式开始和结束。
expect_message(good(), "^Hello\\n$")
expect_message(bad(), "^Hello\\n$")
#Error: bad() does not match '^Hello\n$'. Actual value: "Hello!!!!!\n"
需要 \\n
来匹配 message
添加的新行。
对于警告,它稍微简单一些,因为没有换行符:
expect_warning(warning("Hello"), "^Hello$")
对于错误,它有点难:
good_stop <- function() stop("Hello")
expect_error(good_stop(), "^Error in good_stop\\(\\) : Hello\n$")
请注意任何正则表达式元字符,即 。\| ( ) [ { ^ $ * + ?
, 需要转义。
或者,借用 Mr. Flick 的回答 here ,您可以将消息转换为字符串,然后使用 expect_true
、expect_identical
等
messageToText <- function(expr) {
con <- textConnection("messages", "w")
sink(con, type="message")
eval(expr)
sink(NULL, type="message")
close(con)
messages
}
expect_identical(messageToText(good()), "Hello")
expect_identical(messageToText(bad()), "Hello")
#Error: messageToText(bad()) is not identical to "Hello". Differences: 1 string mismatch
关于r - 在 testthat 中测试确切的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24474754/
我的 R 包修改远程数据库中的数据,我想用 testthat 编写一些测试. 我知道我可以模拟数据库,但我宁愿简单地使用我们的开发数据库。 如何使数据库连接可用于所有需要它的测试,同时确保销毁所有创建
处理生成警告但又返回值的调用的最佳方法是什么? 例如 > require(testthat) > expect_warning(log(-1)) > expect_equal(log(-1), NaN
我想使用“testthat”来测试两个值是否不相等。我可以使用类似的东西来测试相等性 expect_that(x, equals(y)) 但是,如果我期望它们不相等呢?我可以用 expect_fals
我正在构建一个管道工应用程序,并计划使用 TestThat 进行单元测试。但是,当我运行 devtools::test() 时,上面写着 File does not exist: test.R . 我
我有一堆测试,我不希望它们在 CRAN 检查或 Travis CI 构建期间运行。它们要么长时间运行,要么可能导致写入网络数据库的事务/并发冲突。将它们分开的方法(从 R CMD 检查测试中)最适合
我不记得有任何问题,但突然之间,我无法安装任何包,因为 testthat 无法通过测试。作为第 22 条军规,我也无法安装 testthat,因为它无法通过测试。 R version 3.0.1 (2
我想测试一个可以抛出错误的函数,但我也想确保变量值是正确的(以验证错误发生前的预期最后状态 - 所以我想测试不需要的副作用)。可以这样做吗? 要测试的简化表达式 x <- 1 # could a
我正在使用 testthat 来测试具有类似于以下文件树的包: . ├── data │ └── testhaplom.out ├── inst │ └─
我有一个 Shiny 的应用程序,它使用了 4 个函数。我想测试这些功能,但它不是一个包。我应该如何构建我的代码?并在没有开发工具的情况下执行这些测试? 最佳答案 您可以使用 testthat::te
我想测试我的一个函数是否给出特定消息(或警告或错误)。 good <- function() message("Hello") bad <- function() message("Hello!!!!
我正在为一个包编写单元测试,有一些测试我不希望测试在失败时抛出错误,而是给出警告。 这不是我真正的代码,但假设我想测试以下内容: add_x_y <- function(x, y) x + y exp
构建包会导致以下警告: * checking for unstated dependencies in tests ... WARNING ‘library’ or ‘require’ call no
我正在使用 testthat检查我的包裹中的代码。我的一些测试是针对基本功能的,例如构造函数和 getter。其他的用于构建在基本功能之上的复杂功能。如果基本测试失败,那么预计复杂测试也会失败,因此没
我正在使用 Hadley's testthat-based approach用于自动测试我的包。 使用这种方法,最适合放置测试数据文件的位置是仅由测试脚本在 tests/testthat) 中使用的文
当我的 R 包目录结构在测试文件夹中直接包含 R 文件时 . +--Projroot +---- R | -- routine1.R | -- routine2.R +---- tes
我有一个包,我需要在其中使用 testthat 测试文件夹的创建和操作。因此我写了一个测试,它 首先创建文件夹(使用帮助文件)然后 做测试(这很好) 最后删除文件夹(使用名为“test-zz-clea
我正在使用 testthat 包来运行测试,到目前为止我对它非常满意。目前,我正在使用 test_file() 函数运行所有测试并将其结果捕获为数据帧,然后进行一些额外的分析。 但是,我想做的一件事是
问题:我怎样才能得到testthat在加载我的包的环境中运行,而不是从我的包继承? 背景: testthat包运行测试“在从包的命名空间环境继承的环境中”[请参阅文档 test_check ]。这意味
我正在寻找有关出色的 testthat 的最佳实践帮助。放置您的 library(xyzpackage) 调用以使用所有包功能的最佳位置在哪里? 我首先设置了一个 runtest.R 设置路径和包。然
是否有任何工具可以使用 testthat 包评估 R 脚本的代码覆盖率?除了在 an RJournal article 的 future 工作部分提及该主题外,我在 Google 上什么也没找到。 .
我是一名优秀的程序员,十分优秀!