13

是否有任何工具可以使用该testthat包评估 R 脚本的代码覆盖率?除了在RJournal 文章的“未来工作”部分中提到该主题外,我在 Google上一无所获。

4

4 回答 4

23

新到货的covr包裹似乎可以满足您的一切需求,还有更多!它提供与各种 CI 服务的集成和闪亮。它适用于任何类型的测试基础设施(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
于 2015-03-31T02:05:02.223 回答
7

我会回答我自己的问题:-)

我在项目现场问了同样的问题。目前似乎没有对testthat的支持,但最近通过使用 R 的开发版本并利用分析器的一些新功能打开了这种可能性。不幸的是,这似乎是一项艰巨的工作,但希望有人能带头。

在这张票中找到详细信息。

于 2012-09-11T08:59:20.817 回答
1

这是在函数级别计算一组 R 文件的测试覆盖率的尝试:

https://gist.github.com/cannin/819e73426b4ebd5752d5

它依赖于使用正则表达式来查找函数的创建位置和调用时间。

于 2014-11-02T16:24:18.833 回答
1

您可以使用以下解决方案来评估使用该testthat包的 R 脚本的代码覆盖率:

library(covr)
coverage_to_list()
于 2018-09-11T22:45:07.863 回答