Verwachtingen opslaan als unittests en tests uitvoeren

R-pakketten ontwikkelen

Jasmin Ludolf

Content Developer

Workflow

  1. Maak voorbeelden die de functie tonen
  2. Schrijf verwachtingen om gedrag te checken
  3. Bundel verwachtingen met een gemeenschappelijk aspect in een unittest
  4. Draai alle unittests in één bestand
  5. Draai alle unittests in het hele pakket

testen.png

R-pakketten ontwikkelen

Vergelijkbare verwachtingen groeperen

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")) })

uitvoer van test_example

R-pakketten ontwikkelen

Wat als tests falen?

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. Error: `temp_converter(32,  "Fahrenheit", "Celsius")` not equal to 1 
(@test_conversion.R:2) 
--
-- 2. Error: `temp_converter(-40)` did not throw the expected warning. 
(@test_conversion.R:3) 
--
temp_converter(25) did not throw an error.
R-pakketten ontwikkelen

Alle tests in één bestand uitvoeren

  • Gebruik test_file() om alle tests in één bestand uit te voeren
library(testthat)
test_file("test-temp_conversion.R")
Conversion from F to C and C to F works
R-pakketten ontwikkelen

Voer tests uit op de voorbeelden

#' @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() genereert een helpbestand voor temp_converter in de map man
test_example("man/temp_converter.Rd")

uitvoer van test_example

R-pakketten ontwikkelen

Je moet ze allemaal draaien!

  • Gebruik test_file() om je op één bestand te richten
  • Je hoeft niet elke keer test_file() op elk testbestand te draaien
  • Je kunt ook test_package() draaien om alles uit te voeren!
test_package("unitConverter")
R-pakketten ontwikkelen

Laten we oefenen!

R-pakketten ontwikkelen

Preparing Video For Download...