我正在使用Hadley's testthat-based approach来自动测试我的软件包。
使用这种方法,最适合放置测试数据文件的地方是什么,这些文件只是test / testthat中测试脚本使用的文件,而不是R /中的任何其他函数?
我目前的方法是将它们放在tests/testdata
中,然后使用相对路径而不是system.file放置read.table
(以避免需要安装包来运行测试)。
有没有一种标准方法可以做到这一点?
答案 0 :(得分:21)
取消Ben Bolker的评论:
我使用inst / testdata然后
system.file("testdata",...,package="my_package")
这种方法的优点:
inst
中的文件这一事实是长期规范的R练习; system.file("testdata", "some_file")
将始终有效,而../testdata/some_file
将会更加安全。在执行R CMD check
时,我使用相对文件路径遇到了不好的经历。答案 1 :(得分:14)
包目录和文件结构:
└──pkg_name/
├── DESCRIPTION
├── NAMESPACE
├──.Rbuildignore
├── data/
├── man/
├── R/
├── vignettes/
└── tests/
├── testthat.R
└── testthat/
└── helper_myfunc1.R
└── helper_myfunc2.R
└── test_pkg_name.R
<强> testthat.R 强>
library(testthat)
library(pkg_name)
test_check("pkg_name")
helper_myfunc1.R 包含用于测试myfunc1函数的数据
a1 <- 2
a2 <- 2
b1 <- 2*3
b2 <- 6
helper_myfunc2.R 包含用于测试myfunc2函数的数据
c1 <- 50/2
c2 <- 25
d1 <- c(2,3)
d2 <- c(2,3)
test_pkg_name.R 包含对包中函数和其他对象的测试
context('pkg_name_functions')
test_that('myfunc1',
{
expect_identical(a1, a2)
expect_identical(b1, b2)
})
test_that('myfunc2',
{
expect_identical(c1, c2)
expect_identical(d1, d2)
})
进行单元测试
library("devtools")
devtools::load_all()
# Loading pkg_name
devtools::test()
# Loading pkg_name
# Testing pkg_name
# pkg_name_functions: ....
# DONE ================================================================
答案 2 :(得分:7)
同一本R-Pkgs书的Data chapter说“将小文件直接放在你的测试目录中是可以的”。这就是我过去所做的。这听起来就像你正在做的那样,加上testdata
目录。