¿Dónde colocar los datos para las pruebas automatizadas con testthat?
unit-testing automated-tests (3)
El capítulo de datos del mismo libro de R-Pkgs dice "está bien colocar archivos pequeños directamente en su directorio de prueba". Eso es lo que he hecho en el pasado. Y parece que eso es lo que ya estás haciendo, además del directorio testdata
.
Estoy usando el enfoque basado en la prueba de Hadley para la prueba automatizada de mi paquete.
En este enfoque, ¿cuál es el lugar más adecuado para colocar archivos de datos de prueba? Me refiero a los archivos que solo usan los scripts de prueba en tests / testthat), pero no por ninguna otra función en R /.
Mi enfoque actual es ponerlos en tests / testdata, y luego leerlos desde esta tabla con una ruta relativa en lugar de con system.file (para evitar la necesidad de instalar el paquete para ejecutar pruebas).
¿Han cristalizado las mejores prácticas hasta ahora?
Levantando de los comentarios de Ben Bolker:
Uso inst / testdata y luego system.file
system.file("testdata",...,package="my_package")
La ventaja de este método:
- Puede mantener su estructura de archivos limpia, especialmente si tiene muchos archivos de datos y / o pruebas.
- El hecho de que se instalen los archivos en
inst
es una práctica canónica de larga data; parece más seguro quesystem.file("testdata", "some_file")
siempre funcionará, y no que../testdata/some_file
. He tenido malas experiencias con el uso de rutas de archivo relativas al realizar laR CMD check
. - A diferencia de la respuesta de Sathish, no depende de que sus datos se "almacenen" como código R.
- las pruebas se guardan dentro de un archivo que tiene el prefijo ''test_''
- los datos se guardan dentro de archivos con el prefijo ''helper_''
Directorio de paquetes y estructura de archivos:
└──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 contiene datos para probar la función myfunc1
a1 <- 2
a2 <- 2
b1 <- 2*3
b2 <- 6
helper_myfunc2.R contiene datos para probar la función myfunc2
c1 <- 50/2
c2 <- 25
d1 <- c(2,3)
d2 <- c(2,3)
test_pkg_name.R contiene pruebas para funciones y otros objetos en el paquete
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)
})
Realizar pruebas unitarias
library("devtools")
devtools::load_all()
# Loading pkg_name
devtools::test()
# Loading pkg_name
# Testing pkg_name
# pkg_name_functions: ....
# DONE ================================================================