gpt4 book ai didi

r - 如何使用 R 的 testthat 对单个文件进行单元测试?

转载 作者:行者123 更新时间:2023-12-04 09:36:40 29 4
gpt4 key购买 nike

我刚刚开始使用 R 进行单元测试,并发现到目前为止很难进行滑雪橇。我想做的是进入 R 控制台,输入 test()并让 test 为我的 R 包中的所有文件运行测试。

这是我的环境:

sessionInfo()
R version 3.2.3 (2015-12-10)
Platform: x86_64-apple-darwin15.2.0 (64-bit)
Running under: OS X 10.11.4 (El Capitan)

和目录结构:
math
-- R
------ math.R
------ add.R
------ subtract.R
-- tests
------ testthat.R
------ testthat
---------- test_add.R
---------- test_subtract.R
---------- test_math.R

使用以下相关文件示例:

数学
source('add.R')
source('subtract.R')

doubleAdd <- function(x){
return(add(x,x) + add(x,x))
}

添加.R
add <- function(a,b){
return(a + b)
}

测试那个.R
library(testthat)
library(math)

test_check("math")

test_add.R
context('add tests')

test_that('1 + 1 = 2', {
expect_equal(2, add(1,1))
})

错误:

在 R 控制台中,我得到以下结果:
library(devtools)
test()
<b>Loading math
Loading required package: testthat
Error in file(filename, "r", encoding = encoding) (from math.R#1) :
cannot open the connection
In addition: Warning message:
In file(filename, "r", encoding = encoding) :
cannot open file 'add.R': No such file or directory
</b>

但是,如果我通过 setwd('R') 切换工作目录并运行 math.R, doubleAdd功能刚刚好。另外,如果我删除 math.R 或将 math.R 移出“R”目录, test()工作得很好。

我应该如何设置这些文件才能拥有 test()对我所有的 R 文件运行测试?

最佳答案

如果你正在构建一个包,你不应该使用 source .您只需在 NAMESPACE 中导出您的函数文件或使用 roxygen为你做。您可能会收到错误,因为它正在寻找 add.R无论您的工作目录是什么。

这是我从头开始的基本包设置。

add.R - 在 R/目录中

#' @export
add <- function(a,b){
return(a + b)
}

test_add.R - 在 tests/testthat/目录中
context('add tests')

test_that('1 + 1 = 2', {
expect_equal(2, add(1,1))
})

在控制台中运行
library(devtools)
# setup testing framework
use_testthat()

# update NAMESPACE and other docs
document()

# run tests
test()

Loading math
Loading required package: testthat
Testing math
add tests : .

DONE

备注 - 你实际上甚至不需要导出 add .如果它是您正在测试的内部功能,它仍然可以工作。停止使用 source在你的包裹里。

关于r - 如何使用 R 的 testthat 对单个文件进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36225699/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com