Где я должен поместить данные для автоматизированных тестов с 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
.