如何使用R的测试单元测试单个文件?

时间:2016-03-25 18:26:06

标签: r testthat

我现在刚刚进入R单元测试,并发现它到目前为止很难进行滑雪橇。我想要做的是进入R控制台,键入, do the same but create symlink from并测试我的R包中的所有文件的测试。

这是我的环境:

to

目录结构:

test()

使用以下相关文件样本:

math.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)

add.R

math
-- R
------ math.R
------ add.R 
------ subtract.R
-- tests
------ testthat.R 
------ testthat
---------- test_add.R
---------- test_subtract.R
---------- test_math.R

testthat.R

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

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

test_add.R

add <- function(a,b){
    return(a + b)
}

错误:

在R控制台中,我得到以下结果:

library(testthat)
library(math)

test_check("math")

但是,如果我按context('add tests') test_that('1 + 1 = 2', { expect_equal(2, add(1,1)) }) 切换工作目录并运行math.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> 函数就可以了。另外,如果我删除math.R或将math.R移出“R”目录,setwd('R')就可以了。

我应该如何设置这些文件以使doubleAdd运行所有R文件的测试?

1 个答案:

答案 0 :(得分:3)

如果您正在制作套餐,则不应使用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即可。