5

我正在使用 testthat 包来运行测试,到目前为止我对它非常满意。目前,我正在使用 test_file() 函数来运行所有测试并将其结果捕获为数据帧,然后进行一些额外的分析。

但是,我想做的一件事是从数据帧本身的故障中捕获错误消息。我真的很喜欢其中一些消息的描述性,如果有额外的信息在下游会很好。下面是我正在考虑的一个例子。我想将“平均绝对差:1”消息捕获为df.

> df <- test_file(f)
1

1. Failure(@testthat.R#4): insert me here --------------------------------------
1 not equal to expected
Mean absolute difference: 1

> df
        file context           test nb failed error  user system  real
1 testthat.R         insert me here  1      1 FALSE 0.004      0 0.004

消息正在生成,在其中一个 Reporter 类中拦截这些消息似乎并没有太大的难度,但是在浏览了文档和源代码之后,我不认为该功能是内置的。

那么,是否可以使用当前版本的 testthat 来做到这一点?

如果没有,启用此功能需要做什么?我愿意为这个项目做出贡献,但我不确定从哪里开始,因为我不太习惯 R 的 OOP。

感谢您的输入。

4

2 回答 2

1

扁豆,这也超出了我的技能水平。

  1. 您是否尝试在他的 github 项目问题页面上将此问题发布给hadley 。请参阅问题 #215,他显然想重构 Reporter?

它可能是他们可以添加的 Reporter,或者他们可以将其作为新字段添加到他们的test_results.R中的res数据框中。

  1. 你试过其他记者吗?我尝试了点击,它为显示屏提供了更紧凑、更清晰的信息,这可能比默认设置更能帮助你。

尝试使用我的代码(正在检查数据库中的代码名称对于 Apple 共享是否正确,并且我故意添加了拼写错误):

> test_file("code/test-getdata-fun.R", reporter = "tap")
1..3
# Context Get Security Data Point 
ok 1 Inputs ok 
ok 2 Inputs ok 
not ok 3 Get Security Name OK 
  GetDataPoint(conn, test.apple.ticker, "NAME")$NAME not equal to "APPLE INCssss"
1 string mismatches:
x[1]: "APPLE INCssss"
y[1]: "APPLE INC"
  1. 然后,您能否捕获此 R 显示输出以帮助您,即使用sink() 之类的东西将输出发送到文件,然后搜索“不正常”?

我意识到这并不完美,但在重构 Reporter 时它可能是一种解决方法。

于 2015-03-12T14:14:21.043 回答
1
test_results <- test_file("test-something.R", reporter = "list")

结果是某种testthat对象,但您可以将其制成数据框并对其进行处理。

test_results <- as.data.frame(test_results)

例如,我总是按测试持续时间排序。

于 2015-12-25T00:06:33.557 回答