Stocker les attentes sous forme de tests unitaires et exécuter les tests

Développer des packages R

Jasmin Ludolf

Content Developer

Flux de travail

  1. Créer des exemples montrant le fonctionnement de notre fonction
  2. Écrire des attentes pour vérifier le comportement
  3. Regrouper les attentes liées en un test unitaire
  4. Exécuter tous les tests unitaires d'un fichier
  5. Exécuter tous les tests unitaires d'un package

testing.png

Développer des packages R

Regrouper des attentes similaires pour une fonction

expect_equal(temp_converter(32, "Fahrenheit", "Celsius"), 0)
expect_warning(temp_converter(-40, "Celsius", "Celsius"))
expect_error(temp_converter(300, "Kelvin", "Fahrenheit"))
library(testthat)

test_that("Conversion from F to C and C to F works", {
expect_equal(temp_converter(32, "Fahrenheit", "Celsius"), 0) expect_warning(temp_converter(-40, "Celsius", "Celsius")) expect_error(temp_converter(300, "Kelvin", "Fahrenheit")) })

test_example output

Développer des packages R

Et si des tests échouent ?

library(testthat)
test_that("Conversion from F to C and C to F works", {
      expect_equal(temp_converter(32,  "Fahrenheit", "Celsius")), 1)
      expect_warning(temp_converter(-40), "Celsius", "Fahrenheit")
      expect_error(temp_converter(25)) 
})
X Conversion from F to C and C to F works
-- 1. Erreur : `temp_converter(32,  "Fahrenheit", "Celsius")` n'est pas égal à 1 
(@test_conversion.R:2) 
--
-- 2. Erreur : `temp_converter(-40)` n'a pas émis l'avertissement attendu. 
(@test_conversion.R:3) 
--
temp_converter(25) n'a pas levé d'erreur.
Développer des packages R

Exécuter tous les tests d'un fichier

  • Pour exécuter tous les tests d'un fichier, utilisez test_file()
library(testthat)
test_file("test-temp_conversion.R")
Conversion from F to C and C to F works
Développer des packages R

Exécuter des tests sur les exemples

#' @examples
#' # Convert 25 degrees Celsius to Fahrenheit 
#' temp_converter(25, unit_from = "Celsius", unit_to = "Fahrenheit")
#' # Convert 100 degrees Fahrenheit to Celsius 
#' temp_converter(100, unit_from = "Fahrenheit", unit_to = "Celsius")
  • roxygenize() génère un fichier d'aide pour temp_converter dans le répertoire man
test_example("man/temp_converter.Rd")

test_example output

Développer des packages R

Faites-les tous tourner !

  • Utilisez test_file() pour vous concentrer sur un fichier précis
  • Pas besoin d'exécuter test_file() sur chaque fichier de test à chaque fois
  • Vous pouvez plutôt exécuter test_package() pour tout lancer
test_package("unitConverter")
Développer des packages R

Passons à la pratique !

Développer des packages R

Preparing Video For Download...