测试包的R代码覆盖率

rle*_*ndi 11 testing code-coverage r

是否有任何工具可以使用该testthat软件包评估R脚本的代码覆盖率?除了在RJournal文章未来工作部分提到主题外,我没有发现任何谷歌.

jhi*_*hin 22

有一个新到的covr似乎做你想要的一切,甚至更多!它提供与各种CI服务的集成和闪亮.它适用于任何类型的测试基础架构(testthat,RUnit,其他任何东西),也适用于编译代码.


以下是一个非常简单的演示案例,我快速编译以帮助您入门.

install.packages("covr")
Run Code Online (Sandbox Code Playgroud)

添加testcovr/R/doublefun.r包含的文件

doublefun <- function(x, superfluous_option) {
    if (superfluous_option) {
        2*x
    } else {
        3*x
    }
}
Run Code Online (Sandbox Code Playgroud)

和一个testcovr/tests/testthat/test.doublefun.r包含的文件

context("doublefun")

test_that("doublefun doubles correctly", {

    expect_equal(doublefun(1, TRUE), 2)
})
Run Code Online (Sandbox Code Playgroud)

然后运行例如

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
Run Code Online (Sandbox Code Playgroud)

  • 程序包本身使用covr来测试代码覆盖率。这在testthat的[travis.yml文件](https://github.com/hadley/testthat/blob/24d76a1ed7b018440dd91450fce8a02420480955/.travis.yml)中可见。 (2认同)

rle*_*ndi 7

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

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

在此票证中查找详细信息.

  • 看来这个答案现在已经过时了; 看到我的回答. (6认同)