r unit-testing automated-tests testthat

¿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 que system.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 la R 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 ================================================================