测试that包的R代码覆盖率

16

是否有工具可以使用testthat包评估R脚本的代码覆盖率?我在谷歌上除了在一篇 RJournal 文章未来工作 部分提到此话题外,未找到其他相关信息。

4个回答

25

有一个新到的covr软件包,它似乎可以满足你想要的一切,而且更多!它提供了与各种CI服务和shiny的集成。它适用于任何类型的测试基础架构(testthat、RUnit等)并且也适用于编译代码。


下面只是一个我快速编写的非常简单的演示案例,以便让您开始使用。

install.packages("covr")

添加一个文件testcovr/R/doublefun.r,文件包含以下内容:

doublefun <- function(x, superfluous_option) {
    if (superfluous_option) {
        2*x
    } else {
        3*x
    }
}

还有一个文件 testcovr/tests/testthat/test.doublefun.r 包含在其中。

context("doublefun")

test_that("doublefun doubles correctly", {

    expect_equal(doublefun(1, TRUE), 2)
})

然后运行例如

test("testcovr")
## Testing testcovr
## doublefun : .

library(covr)
package_coverage("testcovr")
## doublefun : .
##
## Package Coverage: 66.67%
## R/doublefun.r: 66.67%
zero_coverage(package_coverage("testcovr"))
## doublefun : .
##
##        filename first_line last_line first_column last_column value
## 3 R/doublefun.r          5         5            9          11     0

2
testthat软件包本身使用covr来测量代码覆盖率。 这在testthat的travis.yml文件中可见。 - Paul Rougieux

8
我来回答自己的问题 :-)
我在项目网站上问了同样的问题。目前似乎没有支持testthat库的可能性,但最近通过使用R的开发版本和利用一些新的分析器特性,打开了这种可能性。不幸的是,这似乎是一个巨大的工作,但希望有人能领导这项工作。
此票号中找到详细信息。

6
看起来这个回答现在有点过时了,请看我的回答。 - Eike P.

1
您可以使用以下解决方案,使用testthat软件包评估R脚本的代码覆盖率:
library(covr)
coverage_to_list()

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接