我应该在哪里用testthat将数据用于自动化测试?

时间:2015-09-01 10:02:55

标签: r unit-testing automated-tests testthat

我正在使用Hadley's testthat-based approach来自动测试我的软件包。

使用这种方法,最适合放置测试数据文件的地方是什么,这些文件只是test / testthat中测试脚本使用的文件,而不是R /中的任何其他函数?

我目前的方法是将它们放在tests/testdata中,然后使用相对路径而不是system.file放置read.table(以避免需要安装包来运行测试)。

有没有一种标准方法可以做到这一点?

3 个答案:

答案 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时,我使用相对文件路径遇到了不好的经历。
  • 与Sathish的回答不同,它并不依赖于您的数据存储和#34;作为R代码。

答案 1 :(得分:14)

  • 测试保存在以 'test _'
  • 为前缀的文件中
  • 数据保存在以 '帮助_'
  • 为前缀的文件中

包目录和文件结构:

└──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目录。