R

Pruebas avanzadas con testthat (Creación de paquetes en R 4ª parte)

La semana pasada se ha visto una pequeña introducción a la creación de pruebas automáticas en un paquete de R. Esta semana vamos a ver unos conceptos para crear pruebas avanzadas con testthat cómo son las funciones setup y teardown. En esta entrada no hablaremos de mocks ya que es un tema del que hemos hablado anteriormente en el blog. Si necesitamos probar servicios externos que pueden cambiar con el tiempo, como los datos de un servicio web, el uso de mocks es la opción a tomar.

Esta entrada forma parte de la serie “Creación de paquetes en R” cuyo código se puede encontrar en el repositorio y consta de las siguientes ocho entradas:

  1. Creación de paquetes en R
  2. El archivo DESCRIPTION
  3. Pruebas automáticas con testthat
  4. Pruebas avanzadas con testthat
  5. Medir la cobertura de las automáticas unitarias
  6. Documentación de los paquetes
  7. Creación de vignette
  8. Validación y distribución de los paquetes

Inicialización de entornos con setup() y teardown().

En algunas ocasiones puede ser que necesitemos preparar el entorno antes de ejecutar una prueba, por ejemplo, si necesitamos crear un archivo para probar el funcionamiento de una un método que trabaja con ellos. Para estas situaciones una buena práctica es que el código cree el archivo antes de lanzar la prueba y lo elimine una vez terminado. Además, para garantizar que el orden de ejecución de las pruebas no afecte a los resultados la mejor opción es realizar las operaciones de configuración antes de ejecutar cada prueba. Tareas que se pueden realizar mediante el uso de las funciones setup() y teardown().

La función setup()

El paquete testthat, al igual que la mayoría de frameworks de para la creación de pruebas automáticas, dispone de una serie de herramientas para inicializar el entorno de pruebas. Funciones que se ejecutarán inmediatamente antes de una cada una de las pruebas e inmediatamente después, evitando que sea necesario repetir el código en cada una de las pruebas.

En testthat el código que se escriba en la función setup() en cada uno de los archivos se ejecutará inmediatamente antes de cada prueba. Permitiendo crear el entorno para evitar que un cambio en el orden de ejecución de las pruebas afecte los resultados. Por ejemplo, si hay una prueba que modifica el archivo y se ejecuta antes que uno que lo lee.

La función teardown()

Al igual que existe una función que se ejecuta inmediatamente antes de cada prueba, también existen una función para ejecutar inmediatamente después. En la que se deberían incluir las tareas de limpieza del entorno. Por ejemplo para borrar archivos o servicios que se hubiese lanzado a través de setup().

Ejemplo: trabajo con archivos

En el siguiente ejemplo se muestra cómo utilizar las funciones setup() y teardown() para trabajar con archivos temporales que se borran una vez finalizado el trabajo.

context("Setup and teardown")

tmp <- tempfile()
df <- data.frame(Column1 = c(1,2,3),
                 Column2 = c(3,2,2))

# Creación de un archivo temporal
setup(write.csv(df, tmp))

# Borrado del archivo
teardown(unlink(tmp))

test_that("Setup and teardown", {
  file.df <- read.csv(tmp)

  expect_equal(file.df$Column1, df$Column1)
  expect_equal(file.df$Column2, df$Column2)
})

En esta prueba lo primero que se hace es definir un archivo temporal, para lo que se usa la función tempfile(). Además de esto se crea un objeto dataframe. En la función setup() se guarda en un archivo CSV temporal el contenido del dataframe. Esto se realizará inmediatamente antes de ejecutar cada una de las pruebas automáticas dentro de este archivo. Por otro lado, en la función teardown() nos aseguramos de borrar el archivo, para evitar que dejar residuos tras la ejecución de las pruebas.

Finalmente, en el código tenemos es una prueba en la que se comprueba que el al cargar el archivo se obtiene los mismos valores que existan en el dataframe.

Conclusiones

En esta entrada hemos visto como configurar entornos a la hora de crear pruebas automáticas mediante el uso de las funciones setup() y teardown(). Lo que nos permite configurar pruebas avanzadas con testthat en las que se puede probar diferentes configuraciones. La semana que viene continuaremos con las pruebas automáticas, en este caso mediremos el grado de cobertura en nuestro paquete de R.

Imagen de Peter H en Pixabay

¿Te ha parecido de utilidad el contenido?

Daniel Rodríguez

Share
Published by
Daniel Rodríguez
Tags: Unit testing

Recent Posts

Data Lake y Data Warehouse: diferencias, usos y cómo se complementan en la era del dato

En la era del dato, las organizaciones se enfrentan al reto de gestionar volúmenes masivos…

3 días ago

Documentar tu API de Express con TypeScript usando OpenAPI (Swagger)

En la serie Creación de una API REST con Express y TypeScript construimos una API…

5 días ago

Curiosidad: El sesgo de supervivencia, o por qué prestar atención sólo a los que “llegaron” puede engañarte

Durante la Segunda Guerra Mundial, la Fuerza Aérea de Estados Unidos quería reforzar sus aviones…

1 semana ago

Cómo abrir una ventana de Chrome con tamaño y posición específicos desde la línea de comandos en Windows

En muchas situaciones —ya sea para grabar un tutorial, tomar capturas de pantalla profesionales, probar…

2 semanas ago

La Paradoja del Cumpleaños, o por qué no es tan raro compartir fecha de nacimiento

Imagínate en una sala con un grupo de personas, por ejemplo, en una oficina, un…

2 semanas ago

Programador de tareas de Windows: Guía definitiva para automatizar tu trabajo (BAT, PowerShell y Python)

En el trabajo diario con ordenadores, es común encontrarse con tareas repetitivas: realizar copias de…

3 semanas ago

This website uses cookies.