如何在数据帧中捕获作为结果的一部分的testthat的错误消息?

时间:2015-02-26 01:18:57

标签: r testthat

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

但是,我想要做的一件事是从数据帧本身的故障中捕获错误消息。我真的很喜欢一些消息的描述性,并且额外的信息对于下游来说会很棒。以下是我正在考虑的一个例子。我想将{mean absolute difference: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类中拦截这些消息看起来似乎不是太过分,但是在浏览了文档和源代码之后,我不认为该功能是内置的。

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

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

感谢您的投入。

2 个答案:

答案 0 :(得分:1)

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

  1. 您是否尝试将此问题发布到他的github项目问题页面上的 hadley 。见Issue #215他显然想要重构记者吗?
  2. 他们可以添加一个Reporter,或者他们可以将其作为新字段添加到test_results.R中的 res 数据框中。

    1. 您是否尝试过其他记者?我尝试使用水龙头,它为显示屏提供了更紧凑,更清晰的信息,这可能比默认设置更有帮助。
    2. 尝试使用我的代码(检查数据库中代码的名称是否适用于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()这样的东西将输出发送到文件,然后搜索那个寻找“不好”的东西吗?
      2. 我意识到这并不完美,但它可能是一个解决方法,而记者正在被重构。

答案 1 :(得分:0)

test_results <- test_file("test-something.R", reporter = "list")

结果是某种testthat对象,但您可以将其设置为数据框并对其执行操作。

test_results&lt; - as.data.frame(test_results)

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