我在R中使用了优秀的testthat包.我的问题是,在使用test_file时,我无法在正在测试的代码中看到message()函数的任何输出.例如,假设我在名为test_message.R的文件中有以下代码
f <- function() {
message ("Message: Hello world")
cat ("Cat: Hello world\n")
return (1)
}
test_that ("message shows up", {
expect_equal(f(), 1)
})
Run Code Online (Sandbox Code Playgroud)
我按如下方式运行test_file并获得下面的输出
> test_file("test_message.R")
Cat: Hello world
.
Run Code Online (Sandbox Code Playgroud)
所以我没有看到来自message()的文本.
但是,当我自己运行代码时,我确实看到了:
> f()
Message: Hello world
Cat: Hello world
[1] 1
Run Code Online (Sandbox Code Playgroud)
我知道默认情况下,message()写入stderr和cat写入stdout,我猜测test_file"拦截"stderr来测试警告和错误中的文本.有什么方法可以配置东西,所以我在控制台上看到message()文本?
edd*_*ies 11
这是我在SO上的首次发表的帖子,这是我两周前开始学习的一种语言,所以请保持温和.
我相信您正在寻找以下内容:
test_that ("message shows up", {
expect_message(f(), "^Message: Hello world\\n")
})
Run Code Online (Sandbox Code Playgroud)
另请参阅testthat.pdf第23页上的shows_message&文档(供将来参考:v0.8.1发布于2014-02-22 00:25:04).expect_message
并且完全归功于GSee for /sf/answers/1713354401/,这是我在考虑同样的问题时出现的第二篇文章.
我刚刚发现evaluate_promise(也在上面链接的pdf中).所以这是一个替代方案,它将测试消息并打印输出:
test_that ("message shows up", {
result <- evaluate_promise(f(), print = TRUE)
expect_that(result$message, equals("Message: Hello world\n"))
print(result$output)
})
Run Code Online (Sandbox Code Playgroud)
你不能这样做,至少在不修改testthat. 这是一个运行测试的代码部分:https://github.com/hadley/testthat/blob/0af22cfc7c7f6b13b02537f0d37d96d72d8a98b7/R/test-that.r#L65如果除去suppressMessages从test_code功能,那么信息会显示。
顺便提一句。testthat并没有捕捉到标准输出或错误AFAIK,所以如果你写它来cat或者一些其他的方式,这也将显示出来。
| 归档时间: |
|
| 查看次数: |
2258 次 |
| 最近记录: |