Где я должен поместить данные для автоматизированных тестов с testthat?

Я использую тестовый подход Хэдли для автоматизированного тестирования моего пакета.

При таком подходе, что является наиболее подходящим местом для размещения файлов тестовых данных, то есть файлов, используемых только тестовыми сценариями в тестах /testthat), но не какими-либо другими функциями в R/?

Мой текущий подход заключается в том, чтобы поместить их в tests/testdata, а затем в read.table оттуда с относительным путем, а не с system.file (во избежание необходимости устанавливать пакет для запуска тестов).

Есть ли стандартный способ сделать это?

Ответы

Ответ 1

Отрываясь от комментариев Бена Болкера:

Я использую inst/testdata, а затем system.file("testdata",...,package="my_package")

Преимущество этого метода:

  • Вы можете сохранить свою файловую структуру опрятной, особенно если у вас много файлов данных и/или тестов.
  • Тот факт, что файлы в inst установлены, - это давняя каноническая практика R; кажется более безопасным, что system.file("testdata", "some_file") всегда будет работать, чем это сделает ../testdata/some_file. У меня были плохие впечатления, используя относительные пути к файлам при выполнении R CMD check.
  • В отличие от ответа Sathish, это не зависит от того, что ваши данные "сохранены" как R-код.

Ответ 2

  • тесты хранятся внутри файла с префиксом 'test _'
  • данные хранятся внутри файлов с префиксом 'helper _'

Каталог пакетов и структура файла:

└──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 ================================================================

Ответ 3

В главе " Данные" той же книги R-Pkgs говорится, что "можно помещать небольшие файлы прямо в тестовый каталог". Это то, что я сделал в прошлом. И это похоже на то, что вы уже делаете, плюс каталог testdata.